From 09d1560a3074086b66ec61c6b00c58519ff1ab38 Mon Sep 17 00:00:00 2001 From: Saturneic Date: Thu, 23 Aug 2018 15:24:59 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- communicate/communicate.h | 299 ++++++++++++++++++++++++++++++++++---- list/list.h | 16 +- list/list_expand.h | 4 +- type/type.h | 2 +- 4 files changed, 279 insertions(+), 42 deletions(-) diff --git a/communicate/communicate.h b/communicate/communicate.h index 5ebe1d0..a9ff9e6 100644 --- a/communicate/communicate.h +++ b/communicate/communicate.h @@ -4,48 +4,285 @@ #include "../type/type.h" #include "../list/list_expand.h" -D_FILE *initDataFileForWrite(char *route); -D_FILE *initDataFileForRead(char *route); -STD_BLOCKS *initStandardDBlocks(SID *p_sid, unsigned int type, unsigned long long data_size); -STD_CTN *initStandardDConnection(SID *f_sid, SID *s_sid); -STD_DATA *initStandardData(unsigned int type, SID *s_id); -int dataForStandardDBlock(STD_BLOCKS *p_stdb,void *data); -int dataFileAddStandardData(D_FILE *p_dfile, STD_DATA *p_std); -int standardDataAddBlock(STD_DATA *p_std, SID *p_sid ,unsigned int type, void *data, unsigned long long data_size); -int standardDataAddConnection(STD_DATA *p_std, SID *f_sid, SID *s_sid); -int dataFileWriteIn(D_FILE *p_dfile); -int dataFileReadOut(D_FILE *p_dfile); -__CALLBACK_STATE(dataFileReadOut); -int releaseSTDBlocks(STD_BLOCKS *p_stdb); -int releaseStandardData(STD_DATA *p_std); -int releaseSTDConnection(STD_CTN *p_stdc); -int releaseDFile(D_FILE *p_file); -unsigned long long calStandardData(STD_DATA *p_std); -__CALLBACK_STATE(calStandardDataCTN); -__CALLBACK_STATE(calStandardDataBLK); + +/************************************************ + 相关结构体初始化: 初始化相关结构体有关函数 + ************************************************/ + +/* + *以写的方式初始化数据文件管理结构 + *参数: route指示数据文件路径 + *返回: 处理成功则返回指向相关结构体所在内存空间的指针,不成功则返回NULL. + */ +extern D_FILE *initDataFileForWrite(char *route); + +/* + *以读的方式初始化数据文件管理结构 + *参数: route指示数据文件路径 + *返回: 处理成功则返回指向相关结构体所在内存空间的指针,不成功则返回NULL. + */ +extern D_FILE *initDataFileForRead(char *route); + +/* + *初始化数据块管理结构 + *参数: type指示数据块储存数据的数据类型,data_size指示数据块储存数据的大小 + *返回: 处理成功则返回指向相关结构体所在内存空间的指针,不成功则返回NULL. + */ +extern STD_BLOCKS *initStandardDBlocks(SID *p_sid, unsigned int type, unsigned long long data_size); + +/* + *初始化数据块链接关系管理结构 + *参数: f_sid指示第一个数据块的SID,s_sid指示第二个数据块的SID. + *返回: 处理成功则返回指向相关结构体所在内存空间的指针,不成功则返回NULL. + */ +extern STD_CTN *initStandardDConnection(SID *f_sid, SID *s_sid); + +/* + *初始化标准数据结构管理结构 + *参数: type指示标准数据结构所储存的数据结构的数据类型, s_id指示所储存的数据结构的ID, + 若s_id为NULL,则另外分配一个ID.为了方便管理,标准数据结构必须有ID. + *返回: 处理成功则返回指向相关结构体所在内存空间的指针,不成功则返回NULL. + */ +extern STD_DATA *initStandardData(unsigned int type, SID *s_id); + + + + + +/************************************************ + 相关结构体的组织: 组织相关结构体有关函数 + ************************************************/ + +/* + *为数据块添加数据 + *参数: data为指向所添加数据所在内存空间的指针 + *返回: 处理成功则返回0,不成功则返回-1. + */ +extern int dataForStandardDBlock(STD_BLOCKS *p_stdb,void *data); + +/* + *为数据文件添加标准数据结构 + *返回: 处理成功则返回0,不成功则返回-1. + */ +extern int dataFileAddStandardData(D_FILE *p_dfile, STD_DATA *p_std); + +/* + *为标准数据结构添加数据块 + *参数: type指示所添加数据的数据类型, data为指向所添加数据所在内存空间的指针, data_size指示所添加数据的大小 + *返回: 处理成功则返回0,不成功则返回-1. + */ +extern int standardDataAddBlock(STD_DATA *p_std, SID *p_sid ,unsigned int type, void *data, unsigned long long data_size); + +/* + *为标准数据结构添加数据块链接关系结构体 + *参数: f_sid指示第一个数据块的SID,s_sid指示第二个数据块的SID. + *返回: 处理成功则返回0,不成功则返回-1. + */ +extern int standardDataAddConnection(STD_DATA *p_std, SID *f_sid, SID *s_sid); + + + + + +/************************************************ + 数据文件管理结构的整体写入与读出: 对数据文件管理结构的操作 + ************************************************/ + +/* + *将数据文件管理结构写入到相关数据文件中,以储存. + *返回: 处理成功则返回0,不成功则返回-1. + */ +extern int dataFileWriteIn(D_FILE *p_dfile); + +/* + *数据文件管理结构中标准数据结构管理结构的简略信息的写入函数 + */ __CALLBACK_STATE(StandardDataInfoWrite); + +/* + *数据文件管理结构中标准数据结构管理结构的内容的写入函数 + */ __CALLBACK_STATE(StandardDataWrite); + +/* + *标准数据结构管理结构中的数据块链接关系管理结构的写入函数 + */ __CALLBACK_STATE(StandardDConnectionWrite); + +/* + *标准数据结构管理结构中的数据块管理结构的写入函数 + */ __CALLBACK_STATE(StandardDBlockWrite); -STD_DATA *listToSTD(List *); -List *standardDataToList(STD_DATA *); +/* + *将相关数据文件中的内容,读出到数据文件管理结构中,等待操作. + *返回: 处理成功则返回0,不成功则返回-1. + */ +extern int dataFileReadOut(D_FILE *p_dfile); + +/* + *数据文件管理结构的读出函数的回调函数声明 + */ +__CALLBACK_STATE(dataFileReadOut); + + + + + +/************************************************ + 相关结构的释放操作: 释放相关结构体所占内存空间的相关函数 + ************************************************/ + +/* + *释放数据块所占内存空间 + *返回: 处理成功则返回0,不成功则返回-1. + */ +extern int releaseSTDBlocks(STD_BLOCKS *p_stdb); + +/* + *释放标准数据结构管理结构所占的内存空间 + *返回: 处理成功则返回0,不成功则返回-1. + */ +extern int releaseStandardData(STD_DATA *p_std); + +/* + *释放数据块链接关系管理结构所占的内存空间 + *返回: 处理成功则返回0,不成功则返回-1. + */ +extern int releaseSTDConnection(STD_CTN *p_stdc); + +/* + *释放数据文件管理结构所占的内存空间 + *返回: 处理成功则返回0,不成功则返回-1. + */ +extern int releaseDFile(D_FILE *p_file); + +/* + *计算标准数据结构在文件中占用的空间,以字节为单位. + */ +static unsigned long long calStandardData(STD_DATA *p_std); + +/* + *计算数据块链接关系在文件中的大小 + */ +__CALLBACK_STATE(calStandardDataCTN); + +/* + *计算数据块在文件中的大小 + */ +__CALLBACK_STATE(calStandardDataBLK); + + + + + +/************************************************ + 结构类型的转换: 其他数据结构与标准数据结构的转换相关函数 + ************************************************/ + +/* + *将链表转化为标准数据结构 + *返回: 处理成功则返回指向相关结构体所在内存空间的指针,不成功则返回NULL. + */ +extern STD_DATA *listToSTD(List *); + +/* + *将标准数据结构转换成链表 + *返回: 处理成功则返回指向相关结构体所在内存空间的指针,不成功则返回NULL. + */ +extern List *standardDataToList(STD_DATA *); + +/* + *将标准数据结构转换成链表的回调函数 + */ __CALLBACK_STATE(StandardDataToList); -int readDataFileInfo(D_FILE *p_dfile); -int readStandardData(D_FILE *p_dfile, STD_DATA *p_std); -int readSTDBlocks(STD_BLOCKS *p_stdb); -int checkIfDataFile(D_FILE *p_dfile); -int readStandardDataBySid(D_FILE *p_dfile, SID *p_sid); -__CALLBACK_STATE(findStandardDataBySid); - -MSG *createMessage(char *title, void *data, unsigned long data_size); -int sendMessageIPv4(MSG *p_msg, char *ip, unsigned int port); -void printStandardData(void *value); //STD_DATA *stackToSTD(Stack *); + //STD_DATA *treeToSTD(Tree *); + + + + +/************************************************ + 标准数据结构的随机存取: 标准数据结构的随机存取相关函数 + ************************************************/ + +/* + *读取数据文件的简略信息,为随机存取准备必要信息 + *说明: 该函数只会在数据文件管理结构中建立一个框架,不会读入实际的数据块以及数据块链接关系. + *返回: 处理成功则返回0,不成功则返回-1. + */ +int readDataFileInfo(D_FILE *p_dfile); + +/* + *读取数据文件中的特定标准数据结构 + *参数: p_std为指向框架中的相关标准数据所在内存空间的指针 + *返回: 处理成功则返回0,不成功则返回-1. + */ +int readStandardData(D_FILE *p_dfile, STD_DATA *p_std); + +/* + *读取数据文件中的特定标准数据结构中的数据块 + *返回: 处理成功则返回0,不成功则返回-1. + */ +int readSTDBlocks(STD_BLOCKS *p_stdb); + +/* + *读取文件头,检验文件是否为数据文件 + *返回: 处理成功则返回0,不成功则返回-1. + */ +int checkIfDataFile(D_FILE *p_dfile); + +/* + *通过标准数据结构的ID,在数据文件中读入特定的标准数据结构 + *返回: 处理成功则返回0,不成功则返回-1. + */ +int readStandardDataBySid(D_FILE *p_dfile, SID *p_sid); + +/* + *通过标准数据结构的ID,在数据文件中读入特定的标准数据结构函数的回调函数 + */ +__CALLBACK_STATE(findStandardDataBySid); + + + + + +/************************************************ + 标准数据结构信息: 获取标准数据结构信息相关函数 + ************************************************/ + +/* + *打印标准数据结构信息 + */ +void printStandardData(void *value); + + + + + +/************************************************ + 消息的操作: 消息的操作相关函数 + ************************************************/ + +/* + *创建消息 + *返回: 处理成功则返回指向相关结构体所在内存空间的指针,不成功则返回NULL. + */ +MSG *createMessage(char *title, void *data, unsigned long data_size); + +/* + *通过ipv4地址发送消息 + *返回: 处理成功则返回0,不成功则返回-1. + */ +int sendMessageIPv4(MSG *p_msg, char *ip, unsigned int port); + + + + #endif /* communicate_h */ diff --git a/list/list.h b/list/list.h index c9265f1..61dd983 100644 --- a/list/list.h +++ b/list/list.h @@ -309,42 +309,42 @@ extern unsigned long long len(List *p_list); /* *查询链表是否为空 *返回: 如果链表为空返回1,如果链表不为空则返回0.*/ -int isListEmpty(List *p_list); +extern int isListEmpty(List *p_list); /* *直接获得节点中的整型值 *返回: 返回该节点储存的整型值*/ -int getByIntForNode(Node *); +extern int getByIntForNode(Node *); /* *直接获得节点中的无符号整型值 *返回: 返回该节点储存的无符号整型值*/ -unsigned int getByUIntForNode(Node *); +extern unsigned int getByUIntForNode(Node *); /* *直接获得节点中的浮点值 *返回: 返回该节点储存的浮点值*/ -double getByDoubleForNode(Node *); +extern double getByDoubleForNode(Node *); /* *直接获得节点中的字符串值 *返回: 返回该节点储存的字符串值*/ -char *getByStringForNode(Node *); +extern char *getByStringForNode(Node *); /* *直接获得节点中的指针值 *返回: 返回该节点储存的指针值*/ -void *getByPointerForNode(Node *); +extern void *getByPointerForNode(Node *); /* *直接获得节点的序号 *返回: 返回该节点在链表中的序号*/ -unsigned long long getIndexForNode(List *p_list,Node *p_node); +extern unsigned long long getIndexForNode(List *p_list,Node *p_node); /* *通过节点的序号找到节点中相关的值,并更新其中的储存的值的指针. *返回: 如果成功返回指向该节点的指针,如果失败则返回NULL*/ -Node *updateNodeByIndex(List *p_list, void *new_value, unsigned long long index); +extern Node *updateNodeByIndex(List *p_list, void *new_value, unsigned long long index); diff --git a/list/list_expand.h b/list/list_expand.h index 0ceb7e7..9703f1c 100644 --- a/list/list_expand.h +++ b/list/list_expand.h @@ -22,12 +22,12 @@ /* *若快速声明回调函数则使用该宏 *参数: name为回调函数名.*/ -#define __CALLBACK_STATE(name) List *_do##name(unsigned int, void *, List *) +#define __CALLBACK_STATE(name) static List *_do##name(unsigned int, void *, List *) /* *若快速定义回调函数则使用该宏 *参数: name为回调函数名.*/ -#define __CALLBACK_DEFINE(name) List *_do##name(unsigned int type, void *value, List *expand_resources) +#define __CALLBACK_DEFINE(name) static List *_do##name(unsigned int type, void *value, List *expand_resources) /* *若传递回调函数指针则使用该宏 diff --git a/type/type.h b/type/type.h index 50b810e..4f8f429 100644 --- a/type/type.h +++ b/type/type.h @@ -173,7 +173,7 @@ typedef struct List{ */ struct index_change{ unsigned long long c_index;//偏移量,有正负之分 - int f_count;//偏移量所对应的数组对的节点 + int f_count;//偏移量所对应的数组的节点 }; /*