ZE-Standard-Libraries/include/chain/chain.h

434 lines
14 KiB
C
Raw Normal View History

2019-01-11 18:22:04 +00:00
#ifndef chain_h
#define chain_h
2018-08-22 14:50:08 +00:00
2019-01-11 18:22:04 +00:00
#include <chain/chain_type.h>
2019-01-12 07:31:12 +00:00
#include <list/list.h>
2018-08-22 14:50:08 +00:00
/************************************************
*: ,
* 使.
************************************************/
/*
*, 使
*if_sid指示函数是否为节点获取ID
2019-01-06 10:44:11 +00:00
*: ,NULL.*/
2019-01-11 18:22:04 +00:00
extern CNode *nodeWithInt(int, _Bool if_sid);
2018-08-22 14:50:08 +00:00
/*
*, 使
*if_sid指示函数是否为节点获取ID
*: ,NULL.*/
2019-01-11 18:22:04 +00:00
extern CNode *nodeWithUInt(unsigned int, _Bool if_sid);
2018-08-22 14:50:08 +00:00
/*
*, 使
*if_sid指示函数是否为节点获取ID
*: ,NULL.*/
2019-01-11 18:22:04 +00:00
extern CNode *nodeWithULLInt(unsigned long long, _Bool if_sid);
2018-08-22 14:50:08 +00:00
/*
*, 使
*if_sid指示函数是否为节点获取ID
2019-01-06 10:44:11 +00:00
*: ,NULL.*/
2019-01-11 18:22:04 +00:00
extern CNode *nodeWithDouble(double, _Bool if_sid);
2018-08-22 14:50:08 +00:00
/*
*, 使
*if_sid指示函数是否为节点获取ID
2019-01-06 10:44:11 +00:00
*: ,NULL.*/
2019-01-11 18:22:04 +00:00
extern CNode *nodeWithString(const char *, _Bool if_sid);
2018-08-22 14:50:08 +00:00
/*
*, 使
*if_sid指示函数是否为节点获取ID
2019-01-06 10:44:11 +00:00
*: ,NULL.*/
2019-01-11 18:22:04 +00:00
extern CNode *nodeWithPointer(const void *, _Bool if_sid);
2018-08-22 14:50:08 +00:00
2019-01-06 10:44:11 +00:00
2018-08-22 14:50:08 +00:00
/************************************************
*: ,
* 使
*: .
************************************************/
/*
*
2019-01-06 10:44:11 +00:00
*: ,NULL.*/
2019-01-11 18:22:04 +00:00
extern CNode *nodeWithComplex(void);
2018-08-22 14:50:08 +00:00
/*
*
*: type指明所输入值的类型,value为指向所输入值的内存空间的指针
2019-01-06 10:44:11 +00:00
*: 0,-1.*/
2019-01-11 18:22:04 +00:00
extern int addValueForComplex(CNode *, int type, void *value);
2018-08-22 14:50:08 +00:00
/*
*
2019-01-06 10:44:11 +00:00
*: 0,-1.*/
2019-01-11 18:22:04 +00:00
extern int addIntForComplex(CNode *, int);
2018-08-22 14:50:08 +00:00
/*
*
2019-01-06 10:44:11 +00:00
*: 0,-1.*/
2019-01-11 18:22:04 +00:00
extern int addDoubleForComplex(CNode *, double);
2018-08-22 14:50:08 +00:00
/*
*
2019-01-06 10:44:11 +00:00
*: 0,-1.*/
2019-01-11 18:22:04 +00:00
extern int addStringForComplex(CNode *, char *);
2018-08-22 14:50:08 +00:00
/*
*
2019-01-06 10:44:11 +00:00
*: 0,-1.*/
2019-01-11 18:22:04 +00:00
extern int addPointerForComplex(CNode *, void *);
2018-08-22 14:50:08 +00:00
/************************************************
*: ,
************************************************/
/*
*
*: 0,-1.*/
2019-01-11 18:22:04 +00:00
extern int updateValueWithIntForNode(CNode *,int);
2018-08-22 14:50:08 +00:00
/*
*
*: 0,-1.*/
2019-01-11 18:22:04 +00:00
extern int updateValueWithULLIntForNode(CNode *, uint64_t);
2018-08-22 14:50:08 +00:00
/*
*
*: 0,-1.*/
2019-01-11 18:22:04 +00:00
extern int updateValueWithDoubleForNode(CNode *,double);
2018-08-22 14:50:08 +00:00
/*
*
*: 0,-1.*/
2019-01-11 18:22:04 +00:00
extern int updateValueWithStringForNode(CNode *,char *);
2018-08-22 14:50:08 +00:00
/*
*
*: 0,-1.*/
2019-01-11 18:22:04 +00:00
extern int updateValueWithPointerForNode(CNode *,void *);
2018-08-22 14:50:08 +00:00
/************************************************
*: ,
************************************************/
/*
*,
2019-01-06 10:44:11 +00:00
*: ,NULL.*/
2019-01-11 18:22:04 +00:00
Chain *mply_findByIntForNode(Chain*, int);
2018-08-22 14:50:08 +00:00
/*
*,
2019-01-06 10:44:11 +00:00
*: ,NULL.*/
2019-01-11 18:22:04 +00:00
Chain *mply_findByDoubleForNode(Chain*, double);
2018-08-22 14:50:08 +00:00
/*
*,
2019-01-06 10:44:11 +00:00
*: ,NULL.*/
2019-01-11 18:22:04 +00:00
Chain *mply_findByStringForNode(Chain*, char *);
2018-08-22 14:50:08 +00:00
/*
*,
2019-01-06 10:44:11 +00:00
*: ,NULL.*/
2019-01-11 18:22:04 +00:00
Chain *mply_findByPointerForNode(Chain*, void *);
2018-08-22 14:50:08 +00:00
/************************************************
*:
************************************************/
/*
*
*: p_func为一个函数指针, (type)/(value)/(args),
2019-01-11 18:22:04 +00:00
,,,,
expand_resources为一个链表,
2019-01-06 10:44:11 +00:00
*: ,,NULL.*/
2019-01-11 18:22:04 +00:00
extern Chain *listThrough(Chain *p_list, Chain *(*p_func)(unsigned int type, void *value, Chain *args), Chain *expand_resources);
2018-08-22 14:50:08 +00:00
/*
*,便
*/
2019-01-11 18:22:04 +00:00
extern Chain *newReturn(int if_status ,int status, char *argc, ...);
2018-08-22 14:50:08 +00:00
/*
*,便
*/
2019-01-11 18:22:04 +00:00
Chain *newCReturn(void);
2018-08-22 14:50:08 +00:00
/*
*,便
*/
2019-01-11 18:22:04 +00:00
uint64_t getInfoForListThrough(Chain *expand_resources, int type);
2018-08-22 14:50:08 +00:00
/************************************************
*:
************************************************/
/*
*
*/
2019-01-11 18:22:04 +00:00
uint64_t calListMemory(Chain *);
2018-08-22 14:50:08 +00:00
2018-08-23 16:57:38 +00:00
/***********************************************
*:
***********************************************/
/*
**/
2019-01-11 18:22:04 +00:00
extern uint64_t len(Chain *p_list);
2018-08-23 16:57:38 +00:00
/*
*
*: 1,0.*/
2019-01-11 18:22:04 +00:00
extern int isListEmpty(Chain *p_list);
2018-08-23 16:57:38 +00:00
/*
*
*: */
2019-01-11 18:22:04 +00:00
extern int getByIntForNode(CNode *);
2018-08-23 16:57:38 +00:00
/*
*
*: */
2019-01-11 18:22:04 +00:00
extern unsigned int getByUIntForNode(CNode *);
2018-08-23 16:57:38 +00:00
/*
*
*: */
2019-01-11 18:22:04 +00:00
extern double getByDoubleForNode(CNode *);
2018-08-23 16:57:38 +00:00
/*
*
*: */
2019-01-11 18:22:04 +00:00
extern char *getByStringForNode(CNode *);
2018-08-23 16:57:38 +00:00
/*
*
*: */
2019-01-11 18:22:04 +00:00
extern void *getByPointerForNode(CNode *);
2018-08-23 16:57:38 +00:00
/*
*
*: */
2019-01-12 07:31:12 +00:00
extern uint64_t getIndexForNode(Chain *p_list,CNode *p_node);
2018-08-23 16:57:38 +00:00
/*
*,.
*: ,NULL*/
2019-01-11 18:22:04 +00:00
extern CNode *updateNodeByIndex(Chain *p_list, void *new_value, unsigned long long index);
2018-08-23 16:57:38 +00:00
/**********************************************
*:
*********************************************/
/*
*,,.
*: ID相同.
*: ,NULL*/
2019-01-11 18:22:04 +00:00
extern CNode *copyNode(CNode *);
2018-08-23 16:57:38 +00:00
/*
*,,.
*: ID相同.
*: ,NULL*/
2019-01-11 18:22:04 +00:00
Chain *copyList(Chain *p_list);
2018-08-23 16:57:38 +00:00
/*
*
*: ,NULL.*/
2019-01-12 07:31:12 +00:00
extern CNode *findByIndexForNode(Chain *, uint64_t);
2018-08-23 16:57:38 +00:00
/*
*
*: ,NULL.*/
2019-01-11 18:22:04 +00:00
extern CNode *findByIntForNode(Chain *, int);
2018-08-23 16:57:38 +00:00
/*
*
*: ,NULL.*/
2019-01-11 18:22:04 +00:00
extern CNode *findByDoubleForNode(Chain *, double);
2018-08-23 16:57:38 +00:00
/*
*.
*: ,NULL.*/
2019-01-11 18:22:04 +00:00
extern CNode *findByStringForNode(Chain *, char *);
2018-08-23 16:57:38 +00:00
/*
*.
*: ,NULL.*/
2019-01-11 18:22:04 +00:00
extern CNode *findByPointerForNode(Chain *, void *);
2019-01-06 10:44:11 +00:00
2019-01-12 00:54:05 +00:00
/************************************************
*,
************************************************/
/****
*ID模块相关宏
*/
/*直接获取一个以整型值初始化的节点不带ID的缩略*/
#define lni(cn) nodeWithInt(cn,0)
/*直接获取一个以无符号整型值初始化的不带ID节点的缩略*/
#define lnu(cn) nodeWithUInt(cn,0)
/*直接获取一个以无符号长整形值初始化的节点的缩略*/
#define lnull(cn) nodeWithULLInt(cn,0)
/*直接获取一个以浮点值初始化的不带ID节点的缩略*/
#define lnd(cn) nodeWithDouble(cn,0)
/*直接获取一个以字符串值初始化的不带ID节点的缩略*/
#define lns(cn) nodeWithString(cn,0)
/*直接获取一个以指针值初始化的不带ID节点的缩略*/
#define lnp(cn) nodeWithPointer(cn,0)
/****
*ID模块的相关宏
*/
/*直接获取一个以整型值初始化的带ID节点的缩略*/
#define lsni(cn) nodeWithInt(cn,1)
/*直接获取一个以浮点值初始化的带ID节点的缩略*/
#define lsnd(cn) nodeWithDouble(cn,1)
/*直接获取一个以字符串值初始化的带ID节点的缩略*/
#define lsns(cn) nodeWithString(cn,1)
/*直接获取一个以指针值初始化的节点的缩略*/
#define lsnp(cn) nodeWithPointer(cn,1)
/************************************************
*
************************************************/
/****
*
*/
/*在链表尾部直接加入一个已经用整型值初始化的不带ID的节点*/
#define lisrti(chain, cn) insertInTail(chain, lni(cn));
/*在链表尾部直接加入一个已经用浮点值初始化的不带ID的节点*/
#define lisrtd(chain, cn) insertInTail(chain, lnd(cn));
/*在链表尾部直接加入一个已经用无符号整型值初始化的不带ID的节点*/
#define lisrtu(chain, cn) insertInTail(chain, lnu(cn));
/*在链表尾部直接加入一个已经用无符号长整型值初始化的不带ID的节点*/
#define lisrtull(chain, cn) insertInTail(chain, lnull(cn));
/*在链表尾部直接加入一个已经用指针值初始化的不带ID的节点*/
#define lisrtp(chain, cn) insertInTail(chain, lnp(cn));
/*在链表尾部直接加入一个已经用字符串值初始化的不带ID的节点*/
#define lisrts(chain, cn) insertInTail(chain, lns(cn));
/****
*
*/
/*在链表头部直接加入一个已经用整型值初始化的不带ID的节点*/
#define lisrhi(chain, cn) insertInHead(chain, lni(cn));
/*在链表头部直接加入一个已经用浮点值初始化的不带ID的节点*/
#define lisrhd(chain, cn) insertInHead(chain, lnd(cn));
/*在链表头部直接加入一个已经用无符号整型值初始化的不带ID的节点*/
#define lisrhu(chain, cn) insertInHead(chain, lnu(cn));
/*在链表头部直接加入一个已经用无符号长整型值初始化的不带ID的节点*/
#define lisrhull(chain, cn) insertInHead(chain, lnull(cn));
/*在链表头部直接加入一个已经用指针值初始化的不带ID的节点*/
#define lisrhp(chain, cn) insertInHead(chain, lnp(cn));
/*在链表头部直接加入一个已经用字符串值初始化的不带ID的节点*/
#define lisrhs(chain, cn) insertInHead(chain, lns(cn));
/************************************************
*
************************************************/
/*快速获得指针类型的节点所储存的值*/
#define lidxp(chain, cn) getByPointerForNode(findByIndexForNode(chain, cn))
/*快速获得整型类型的节点所储存的值*/
#define lidxi(chain, cn) getByIntForNode(findByIndexForNode(chain, cn))
/*快速获得浮点类型的节点所储存的值*/
#define lidxd(chain, cn) getByDoubleForNode(findByIndexForNode(chain, cn))
/*快速获得字符串类型的节点所储存的值*/
#define lidxs(chain, cn) getByStringForNode(findByIndexForNode(chain, cn))
/*快速获得无符号长整型类型的节点所储存的值*/
#define lupdull(chain,cn,value) updateValueWithULLIntForNode(findByIndexForNode(chain, cn),value)
/************************************************
*
************************************************/
/*通过节点的序号直接得到它的值*/
#define lidxvle(chain,cn) (findByIndexForNode(chain, cn)->value)
/*通过节点序号直接移除节点*/
#define lrmvidx(chain,cn) removeByNode(chain, findByIndexForNode(chain, cn)
/*从列表头移除节点的缩略*/
#define lpoph(chain) popFromHead(chain)
/*从列表尾移除节点的缩略*/
#define lpopt(chain) popFromTail(chain)
/*通过节点的ID直接获得节点的值*/
#define lfndsid(chain,sid) (findByIdForNode(chain,sid)->value)
/*创建一个不带ID的链表的缩略*/
#define lstns() initList(0);
/*创建一个带有ID的链表缩略*/
#define lstn() initList(1);
2019-01-11 18:22:04 +00:00
#endif /* chain_h */