Annotation of mstools/samples/rpc/dict/dict0.h, revision 1.1

1.1     ! root        1: /*************************************************************/
        !             2: /**                                                         **/
        !             3: /**                 Microsoft RPC Examples                  **/
        !             4: /**                 Dictionary Application                  **/
        !             5: /**             Copyright(c) Microsoft Corp. 1991           **/
        !             6: /**                                                         **/
        !             7: /*************************************************************/
        !             8: 
        !             9: /**************************************************************/
        !            10: /*  user interface header file for top down splay package     */
        !            11: /*  based on Sleator & Tarjan's Self Adjusting Trees          */
        !            12: /*  Author: Dov Harel,  12/9/1988                             */
        !            13: /*  Modified to:                                              */
        !            14: /*    compact (space optimization)                            */
        !            15: /*    return Dict_Status                                      */
        !            16: /*    changed interfaces                                      */
        !            17: /*    Dov Harel, 11/90                                        */
        !            18: /**************************************************************/
        !            19: 
        !            20: typedef
        !            21:   /* type of a comparison function */
        !            22:   int (*cmp_rec_func)(void *, void *);
        !            23: 
        !            24: typedef struct tnode {
        !            25:     struct tnode *left;     /* left child pointer */
        !            26:     struct tnode *right;    /* right child pointer */
        !            27:     void *item;             /* pointer to some structure */
        !            28: } TreeNode;
        !            29: 
        !            30: typedef struct dictnode {
        !            31:     TreeNode *root;                 /* pointer to the root of a SAT    */
        !            32:     long size;                      /* number of records in dictionary */
        !            33:     void * state;                   /* reserved for state info         */
        !            34:     /* int (*cmp_rec)(void *, void *); comparison function pointer     */
        !            35:     cmp_rec_func cmp_rec;
        !            36:     TreeNode* (*splay)(TreeNode *, void *, cmp_rec_func);
        !            37:                                     /* pointer to a splay function     */
        !            38:     void (*print_rec)(void *);      /* one line print function         */
        !            39: } Dictionary;
        !            40: 
        !            41: /*************************************************************************/
        !            42: /*****              Core functions (internal)                        *****/
        !            43: /*************************************************************************/
        !            44: 
        !            45: 
        !            46: TreeNode *              /* returns the new root                 */
        !            47: tdSplay(                /* general top down splay               */
        !            48:     TreeNode *root,     /* the current root of the tree         */
        !            49:     void *keyItem,      /* pointer to a "key item" searched for */
        !            50:     int (*cmp)(void *, void *) );
        !            51:                         /* pointer to a comparison function     */
        !            52: 
        !            53: TreeNode*
        !            54: tdSplayLeft(TreeNode* root);
        !            55: 
        !            56: TreeNode*
        !            57: tdSplayRight(TreeNode* root);
        !            58: 
        !            59: void
        !            60: print_tree_sat(         /* prints the binary tree (indented right subtree,
        !            61:                            followed by the root, followed by the indented
        !            62:                            right dubtree) */
        !            63:     Dictionary * dp,
        !            64:     int indent);        /* number of blanks to indent subtrees */
        !            65: 
        !            66: /*************************************************************************/
        !            67: /***    Minimal Dictionary Operations:                                 ***/
        !            68: /***                                                                   ***/
        !            69: /***    Dictionary *Dict_New(Cmp_rec*, Splay*, print_rec*)             ***/
        !            70: /***                                                                   ***/
        !            71: /***    Dict_Status Dict_Find(Dictionary*, Item*)                      ***/
        !            72: /***    Dict_Status Dict_Next(Dictionary*, Item*)                      ***/
        !            73: /***    Dict_Status Dict_Prev(Dictionary*, Item*)                      ***/
        !            74: /***    Dict_Status Dict_Insert(Dictionary*, Item*)                    ***/
        !            75: /***    Dict_Status Dict_Delete(Dictionary*, Item**)                   ***/
        !            76: /***                                                                   ***/
        !            77: /***    Item* DICT_CURR_ITEM(Dict*)                                    ***/
        !            78: /*************************************************************************/
        !            79: 
        !            80: typedef enum {
        !            81:     SUCCESS,
        !            82:     ITEM_ALREADY_PRESENT,
        !            83:     ITEM_NOT_FOUND,
        !            84:     FIRST_ITEM,
        !            85:     LAST_ITEM,
        !            86:     EMPTY_DICTIONARY,
        !            87:     NULL_ITEM
        !            88: }
        !            89: Dict_Status;
        !            90: 
        !            91: #define DICT_CURR_ITEM(pDict) ( (pDict)->root->item )
        !            92: 
        !            93: #define DICT_EMPTY(pDict) ( (pDict)->root == NULL )
        !            94: 
        !            95: Dictionary*
        !            96: Dict_New(                    /* returns a new dictionary node          */
        !            97:     int (*cmp_rec)           /* pointer to item comparison function    */
        !            98:         (void *, void *),
        !            99:     TreeNode* (*splay)       /* pointer to a splay function            */
        !           100:         (TreeNode *, void *, cmp_rec_func),
        !           101: 
        !           102:     void (*print_rec)        /* pointer to one line item print routine */
        !           103:         (void *) );
        !           104: 
        !           105: Dict_Status
        !           106: Dict_Find(
        !           107:     Dictionary* dp,     /* Dictionary to be searched. */
        !           108:     void* item);        /* Item searched for. */
        !           109: 
        !           110: Dict_Status
        !           111: Dict_Next(
        !           112:     Dictionary* dp,     /* Dictionary to be searched. */
        !           113:     void* item);        /* A Key item.  Advance to successor of item in dp. */
        !           114: 
        !           115: Dict_Status
        !           116: Dict_Prev(
        !           117:     Dictionary* dp,     /* Dictionary to be searched. */
        !           118:     void* item);        /* A Key item.  Retreat to predecessor of item in dp. */
        !           119: 
        !           120: Dict_Status
        !           121: Dict_Insert(            /* insert the given item into the tree */
        !           122:     Dictionary* dp,     /* the modified dictionary */
        !           123:     void* item);        /* the item to be inserted */
        !           124: 
        !           125: Dict_Status
        !           126: Dict_Delete(            /* delete the given item into from the tree */
        !           127:     Dictionary* dp,     /* the modified dictionary */
        !           128:     void** pItem);      /* IN: points to the (key) item to be deleted */
        !           129:                         /* OUT: points to the item just deleted */

unix.superglobalmegacorp.com

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