📄 linklist.h
字号:
/**************************************************************************** Copyright (c) 2008 OCC, Inc.**** Project: Link List** File: linklist.h** Author: Michael** Date: 10/31/2008**** Purpose:** Header file for linklist.c.**************************************************************************/#ifndef LINKLIST_H#define LINKLIST_H#ifdef __cplusplusextern "C"{#endif /* __cplusplus *//* Include files. */#include <stdlib.h>#include <stdio.h>#include <string.h>/* Macro constant definitions. */#define MEM_SET_DEFAULT_VALUE 0x00#define MIKETEST#ifdef MIKETEST#define MEMALLOC malloc#define MEMFREE free#define PRINTF(formatP, argP...) \ printf("%s()[%d]", __FUNCTION__, __LINE__);printf((formatP), ##argP)#endif/* Type definitions. */#ifdef MIKETESTtypedef unsigned char uint8; /* 8-bit unsigned value. */typedef unsigned short uint16; /* 16-bit unsigned value. */typedef unsigned int uint32; /* 32-bit unsigned value. */typedef signed char sint8; /* 8-bit signed value. */typedef signed short sint16; /* 16-bit signed value. */typedef signed int sint32; /* 32-bit signed value. */typedef enum{ /* Common return codes. */ eOS_RET_MIN, eOS_RET_SUCCESS = eOS_RET_MIN, eOS_RET_FAILURE, eOS_RET_INVALID_ARG, eOS_RET_INVALID_STATE, eOS_RET_NO_RESOURCE, eOS_RET_TIME_OUT, eOS_RET_AGAIN, eOS_RET_NOT_EXIST, eOS_RET_ALREADY_EXIST,} eOsRet;#endif /* MIKETEST */typedef enum{ eLINK_LIST_ADD_TYPE_MIN = 0, eLINK_LIST_ADD_TYPE_CREATE_HEARDER = eLINK_LIST_ADD_TYPE_MIN, eLINK_LIST_ADD_TYPE_ADD_Y_BROTHER, /* add young brother(next) node. */ eLINK_LIST_ADD_TYPE_ADD_O_BROTHER, /* add old brother(previous) node. */ eLINK_LIST_ADD_TYPE_ADD_CHILD, /* add child node. */ eLINK_LIST_ADD_TYPE_MAX,} eLinkListAddType;typedef struct{ char *nameP; char *valueP;} tAttrElement;typedef struct _tAttrArray{ uint8 attrCount; tAttrElement *attrP;} tAttrArray;typedef struct tLinkListNode{ struct tLinkListNode *parentP; /* point to parent node. */ struct tLinkListNode *childP; /* point to child node. */ struct tLinkListNode *oldBrotherP; /* point to old brother(previous) node */ struct tLinkListNode *youngBrotherP; /* point to young brother(next) node */ void *dataP;} tLinkListNode;typedef tLinkListNode* tLinkListHeader;typedef eOsRet(*DataCreateFunP)(tLinkListNode *newNodeP, void *dataP);typedef eOsRet(*DataDeleteFunP)(tLinkListNode *deleteNodeP);typedef void(*DataDumpFunP)(void *dataP);typedef eOsRet(*DataFindFunP)(void *linkNodeDataP, void *dataP);/* External function declarations. */tLinkListNode *LinkListAddNode(tLinkListNode *linkListNodeP, eLinkListAddType addType, void *dataCreateFunP, void *dataP);tLinkListNode *LinkListNodeCreate(void *dataCreateFunP, void *dataP);tLinkListNode *LinkListNodeFind(tLinkListNode *linkListNodeP, void *dataFindFunP, void *dataP);tLinkListNode *LinkListFind(tLinkListNode * linkListNodeP, void *dataFindFunP, void * dataP);eOsRet LiniListNodeDelete(tLinkListNode *deleteNodeP, void *dataDeleteFunP);eOsRet LinkListDelete(tLinkListNode *linkListNodeP, void *dataDeleteFunP);eOsRet LinkListNodeDump(tLinkListNode *linkListNodeP, void *dataDumpFunP);eOsRet LinkListDump(tLinkListNode *linkListNodeP, void *dataDumpFunP);/* Macro API definitions. */#define ASSERT_POINTER(ptr) \ if ((ptr) == NULL) \ { \ printf("%s() %s@%d argument invalid.\n", __FUNCTION__, __FILE__, \ __LINE__); \ return (eOS_RET_INVALID_ARG); \ }#define ASSERT_RETURN(ret) \ if ((ret) != eOS_RET_SUCCESS) \ { \ printf("%s() %s@%d failed,ret %d.\n", __FUNCTION__, __FILE__, \ __LINE__, ret); \ return (ret); \ }/* Global variable declarations. */#ifdef __cplusplus} /* extern "C" */#endif /* __cplusplus */#endif /* LINKLIST_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -