Annotation of mstools/samples/deb/linklist.h, revision 1.1.1.1

1.1       root        1: // ************************************************************************
                      2: // LinkList.H - (Ordered) Double Linked List Header
                      3: // ************************************************************************
                      4: // PURPOSE: Provide a generalized sorted double linked list package
                      5: //
                      6: // FUNCTIONS:
                      7: //   InitList          - initialize/clear list
                      8: //   CreateNode        - allocate a new node that can be put into list
                      9: //   InsertNode        - insert a new node into the list
                     10: //   DeleteCurrentNode - remove a node from the list
                     11: //   GetNextNode       - get the next (right) node from the CurrentNode
                     12: //   GetPreviousNode   - get the previous (left) node from the
                     13: //                       CurrentNode
                     14: //   GetNode           - get nth Occurence of a node that matches a
                     15: //                       key(s)
                     16: //   GetListError      - get the error value
                     17: //
                     18: // COMMENTS: The application must serialize access to the linked list
                     19: //
                     20: //   Format of the Ordering and Matching functions is as follows:
                     21: //
                     22: //   int OrderFunc( PNODE pNodeOne, PNODE pNodeTwo )
                     23: //   {
                     24: //     if( (pNodeOne->NodeData).Key <  (pNodeTwo->NodeData).Key )
                     25: //       return( LEFT_OF  );
                     26: //     if( (pNodeOne->NodeData).Key == (pNodeTwo->NodeData).Key )
                     27: //       return( MATCH    );
                     28: //     if( (pNodeOne->NodeData).Key  > (pNodeTwo->NodeData).Key )
                     29: //       return( RIGHT_OF );
                     30: //   }
                     31: //
                     32: // ************************************************************************
                     33: #include <WinDef.H>  // for DWORD definition only
                     34: 
                     35: #define NO_ERROR_FOUND      1
                     36: #define NO_FREE_MEM_ERROR  -1
                     37: #define NO_NODE_ERROR      -2
                     38: #define NO_MATCH_ERROR     -3
                     39: #define NO_NEXT_NODE_ERROR -4
                     40: #define NO_PREV_NODE_ERROR -5
                     41: 
                     42: #define DEREFERENCE_NULL_ERROR -99
                     43: 
                     44: #define LEFT_OF   -1
                     45: #define MATCH      0
                     46: #define OVERWRITE  0
                     47: #define RIGHT_OF   1
                     48: 
                     49: // ************************************************************************
                     50: // the NODE_DATA type should be modified to suit needs
                     51: 
                     52: typedef struct NODE_DATA_STRUCT {
                     53:           DWORD  dwThreadId;
                     54:           HANDLE hThread;
                     55:         } NODE_DATA;
                     56: 
                     57: //* End of custom NODE_DATA definition
                     58: // ************************************************************************
                     59: 
                     60: typedef struct NODE_STRUCT* PNODE;
                     61: 
                     62: //-- definition of a node
                     63: typedef struct NODE_STRUCT {
                     64:           NODE_DATA NodeData;
                     65:           PNODE     pLeftLink;
                     66:           PNODE     pRightLink;
                     67:         } NODE;
                     68: 
                     69: //-- definition of a list
                     70: typedef struct LIST_STRUCT* PLIST;
                     71: 
                     72: typedef struct LIST_STRUCT {
                     73:           int   ListError;
                     74:           PNODE pFirstNode;
                     75:           PNODE pCurrentNode;
                     76:           PNODE pLastNode;
                     77:           int   (*OrderFunction)(PNODE, PNODE);
                     78:         } LIST;
                     79: 
                     80: //-- prototypes
                     81: int GetListError( PLIST pList );
                     82: int InitList( PLIST pList, int  (*OrderingFunction)( PNODE pNodeOne, PNODE pNodeTwo ) );
                     83: int CreateNode( PLIST pList, PNODE* pNewNode );
                     84: int InsertNode( PLIST pList, PNODE pNewNode );
                     85: int DestroyNode( PNODE pNode );
                     86: int DeleteCurrentNode( PLIST pList );
                     87: int GetNextNode( PLIST pList, PNODE* ppNode );
                     88: int GetPreviousNode( PLIST pList, PNODE* ppNode );
                     89: int GetNode( PLIST pList, PNODE* pKeyNode,
                     90:              int  (*MatchingFunction)( PNODE pNodeOne, PNODE pNodeTwo ),
                     91:              int  Occurence );

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.