Annotation of mstools/samples/rpc/dict/replay.idl, 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: #define IN [in]
        !            10: #define OUT [out]
        !            11: #define SIZE_IS(size)
        !            12: #define LENGTH_IS(length)
        !            13: #define UNIQUE
        !            14: #define INTERFACE
        !            15: #define SPLAY_TREE
        !            16: #define CALLBACK
        !            17: 
        !            18: 
        !            19: 
        !            20: [
        !            21:     uuid (12345678-1234-ABCD-EF00-0123456789AB),
        !            22:     version(1.0),
        !            23:     endpoint("msc_np:[\\pipe\\splay]")
        !            24: ]
        !            25:     interface dict {
        !            26: 
        !            27: /*************************************************************************/
        !            28: /***            Strongly typed tree nodes and dictionaries             ***/
        !            29: /*************************************************************************/
        !            30: 
        !            31: /*
        !            32:  ************************************************************************
        !            33:  * Record type - previously imported from util1.idl
        !            34:  * This is the type of items stored in the remote dictionary.
        !            35:  ************************************************************************
        !            36: */
        !            37: 
        !            38: typedef struct _Record {
        !            39:     short key;                      // RPC "generation"
        !            40:     [string] char* name;            // contributor
        !            41: } Record;
        !            42: 
        !            43: /*
        !            44:  ************************************************************************
        !            45:  * The following definitions (RDict, RecordTreeNode) are required
        !            46:  * for marshalling a complete dictionary, binary tree, respectively.
        !            47:  * All pointers are based on RPC-able types, replacing "void*"
        !            48:  * pointers in the local dictionary (dict0) which are non-transmissible.
        !            49:  ************************************************************************
        !            50: */
        !            51: 
        !            52: typedef struct _RecordTreeNode {
        !            53:     struct _RecordTreeNode *left;   // left child pointer
        !            54:     struct _RecordTreeNode *right;  // right child pointer
        !            55:     Record *item;                   // pointer to a Record structure
        !            56: } RecordTreeNode;
        !            57: 
        !            58: typedef struct _DictState {
        !            59:     short ref_count;                // for shared dictionaries
        !            60:     Record * curr_record;           // for global iterators
        !            61: } DictState;
        !            62: 
        !            63: typedef struct _RDict {
        !            64:     RecordTreeNode *root;           // pointer to the root of a SAT
        !            65:     long size;                      // number of records in dictionary
        !            66:     DictState * state;              // pointer to state info
        !            67: } RDict;
        !            68: 
        !            69: /*
        !            70:  * VDict is a "virtual dictionary" object.  It is used in the client
        !            71:  * application as a handle on a dictionary maintained by a server
        !            72: */
        !            73: typedef [context_handle] void * VDict;
        !            74: 
        !            75: /*
        !            76: typedef enum {
        !            77:     DICT_SUCCESS,
        !            78:     DICT_ITEM_ALREADY_PRESENT,
        !            79:     DICT_ITEM_NOT_FOUND,
        !            80:     DICT_FIRST_ITEM,
        !            81:     DICT_LAST_ITEM,
        !            82:     DICT_EMPTY_DICTIONARY,
        !            83:     DICT_NULL_ITEM
        !            84: }
        !            85: VDict_Status;
        !            86: 
        !            87:  *
        !            88:  * VDict_Status and the #defines following replaces the above enum
        !            89:  * definition for now.
        !            90: */
        !            91: 
        !            92: typedef short VDict_Status;
        !            93: 
        !            94: #define DICT_SUCCESS 0
        !            95: #define DICT_ITEM_ALREADY_PRESENT 1
        !            96: #define DICT_ITEM_NOT_FOUND 2
        !            97: #define DICT_FIRST_ITEM 3
        !            98: #define DICT_LAST_ITEM 4
        !            99: #define DICT_EMPTY_DICTIONARY 5
        !           100: #define DICT_NULL_ITEM 6
        !           101: 
        !           102: 
        !           103: /*************************************************************************/
        !           104: /***    Generic Dictionary Operations: (From dict0.h)                  ***/
        !           105: /***                                                                   ***/
        !           106: /***    Dictionary *Dict_New(Cmp_rec*, Splay*, print_rec*)             ***/
        !           107: /***                                                                   ***/
        !           108: /***    Dict_Status Dict_Find(Dictionary*, Item*)                      ***/
        !           109: /***    Dict_Status Dict_Next(Dictionary*, Item*)                      ***/
        !           110: /***    Dict_Status Dict_Prev(Dictionary*, Item*)                      ***/
        !           111: /***    Dict_Status Dict_Insert(Dictionary*, Item*)                    ***/
        !           112: /***    Dict_Status Dict_Delete(Dictionary*, Item**)                   ***/
        !           113: /***                                                                   ***/
        !           114: /***    Item* DICT_CURR_ITEM(Dict*)                                    ***/
        !           115: /*************************************************************************/
        !           116: 
        !           117: /*************************************************************************/
        !           118: /***    Virtual Dictionary Operations (on remote dictionaries)         ***/
        !           119: /***                                                                   ***/
        !           120: /***    VDict_Status VDict_New(OUT VDict *)                            ***/
        !           121: /***                                                                   ***/
        !           122: /***    VDict_Status VDict_Find(IN VDict, IN OUT Record**)             ***/
        !           123: /***    VDict_Status VDict_Next(IN VDict, IN OUT Record**)             ***/
        !           124: /***    VDict_Status VDict_Prev(IN VDict, IN OUT Record**)             ***/
        !           125: /***    VDict_Status VDict_Insert(IN VDict, IN Record*)                ***/
        !           126: /***    VDict_Status VDict_Delete(IN VDict, IN OUT Record**)           ***/
        !           127: /***                                                                   ***/
        !           128: /***    VDict_Status VDict_Get_Dict(IN VDict, OUT RDict**)             ***/
        !           129: /***    VDict_Status VDict_Curr_Item(IN VDict, OUT Record**);          ***/
        !           130: /***    VDict_Status VDict_Delete_Curr(IN VDict, OUT Record**);        ***/
        !           131: /***    VDict_Status VDict_Curr_Next(IN VDict, OUT Record**);          ***/
        !           132: /***    VDict_Status VDict_Curr_Prev(IN VDict, OUT Record**);          ***/
        !           133: /***                                                                   ***/
        !           134: /*************************************************************************/
        !           135: 
        !           136: /*
        !           137:  ************************************************************************
        !           138:  * Most of the remote operations interfacing to a remote dictionary
        !           139:  * are very close to operations on local dictionaries, with the
        !           140:  * following noted exceptions.  To compansate for the fact that it is
        !           141:  * possible to "peek" and get the current item of a local dictionary,
        !           142:  * some interfaces had to be added, and others have to be changed to
        !           143:  * closely match the capabilities of a local dictionaries by a remote
        !           144:  * dictionary.  In particular the item (Record) argument became an OUT
        !           145:  * or an IN OUT argument, returning the value of the "current_item"
        !           146:  * following an operation (VDict_Find, VDict_Next, VDict_Prev).
        !           147:  * The operations VDict_Curr_Item, VDict_Delete_Curr, VDict_Curr_Next,
        !           148:  * and VDict_Curr_Prev were added to get functionality obtained in
        !           149:  * local dictionaries by the DICT_CURR_ITEM macro, and by passing the
        !           150:  * current item as an IN argument to Dict_Delete, Dict_Next
        !           151:  * and Dict_Prev.  The basic return [IN] OUT parameter was changed
        !           152:  * from (Item*) to (Record**), partly to further test the pointer
        !           153:  * handling capabilities of the MIDL compiler.
        !           154:  *************************************************************************
        !           155: */
        !           156: 
        !           157: /*
        !           158:  *************************************************************************
        !           159:  * In non-shared mode: Creates and initializes a new (private copy of
        !           160:  * the) dictionary.
        !           161:  *
        !           162:  * In shared mode: If there is an existing shared dictionary, return
        !           163:  * it, otherwise Creates and initializes a new (shared copy of
        !           164:  * the) dictionary.
        !           165:  *************************************************************************
        !           166: */
        !           167: 
        !           168: VDict_Status
        !           169: VDict_New(
        !           170:   [in] short shared_dict,
        !           171:   [out] VDict * v_dict
        !           172:   );
        !           173: 
        !           174: /*
        !           175:  *************************************************************************
        !           176:  * Find *item in the dictionary.  If *item was not present a "neighbor"
        !           177:  * of *item will be returned instead
        !           178:  *************************************************************************
        !           179: */
        !           180: 
        !           181: VDict_Status
        !           182: VDict_Find(
        !           183:     [in] VDict  v_dict,
        !           184:     [in, out, unique] Record ** item
        !           185:     );
        !           186: 
        !           187: /*
        !           188:  *************************************************************************
        !           189:  * Get successor / predecessor of *item, and update *item to point to it
        !           190:  *************************************************************************
        !           191: */
        !           192: 
        !           193: VDict_Status
        !           194: VDict_Next(
        !           195:     [in] VDict  v_dict,
        !           196:     [in, out, unique] Record ** item
        !           197:     );
        !           198: 
        !           199: VDict_Status
        !           200: VDict_Prev(
        !           201:     [in] VDict  v_dict,
        !           202:     [in, out, unique] Record ** item
        !           203:     );
        !           204: 
        !           205: /*
        !           206:  *************************************************************************
        !           207:  * Get successor / predecessor of RDICT_CURR_RECORD(v_dict),
        !           208:  * and update *item to point to it (global iterator prev)
        !           209:  *************************************************************************
        !           210: */
        !           211: 
        !           212: VDict_Status
        !           213: VDict_Curr_Next(
        !           214:     [in] VDict  v_dict,
        !           215:     [out, unique] Record ** item
        !           216:     );
        !           217: 
        !           218: VDict_Status
        !           219: VDict_Curr_Prev(
        !           220:     [in] VDict  v_dict,
        !           221:     [out, unique] Record ** item
        !           222:     );
        !           223: 
        !           224: /*
        !           225:  *************************************************************************
        !           226:  * Insert *item into the dictionary
        !           227:  *************************************************************************
        !           228: */
        !           229: 
        !           230: VDict_Status
        !           231: VDict_Insert(
        !           232:     [in] VDict  v_dict,
        !           233:     [in, unique] Record * item
        !           234:     );
        !           235: 
        !           236: /*
        !           237:  *************************************************************************
        !           238:  * Delete *item from the dictionary.  (It is the callers responsibility
        !           239:  * to free the storage allocated for the returned record)
        !           240:  *************************************************************************
        !           241: */
        !           242: 
        !           243: VDict_Status
        !           244: VDict_Delete(
        !           245:     [in] VDict  v_dict,
        !           246:     [in, out, unique] Record ** item
        !           247:     );
        !           248: 
        !           249: /*
        !           250:  *************************************************************************
        !           251:  * Return a local copy of the whole dictionary
        !           252:  *************************************************************************
        !           253: */
        !           254: 
        !           255: VDict_Status
        !           256: VDict_Get_Dict(
        !           257:     [in] VDict  v_dict,
        !           258:     [out, unique] RDict ** r_dict
        !           259:     );
        !           260: 
        !           261: /*
        !           262:  *************************************************************************
        !           263:  * Return DICT_CURR_ITEM(v_dict)
        !           264:  *************************************************************************
        !           265: */
        !           266: 
        !           267: VDict_Status
        !           268: VDict_Curr_Item(
        !           269:     [in] VDict  v_dict,
        !           270:     [out, unique] Record ** item
        !           271:     );
        !           272: 
        !           273: /*
        !           274:  *************************************************************************
        !           275:  * Delete RDICT_CURR_RECORD(v_dict) from the dictionary.
        !           276:  * (It is the callers responsibility to free the storage
        !           277:  * allocated for the returned record)
        !           278:  *************************************************************************
        !           279: */
        !           280: 
        !           281: VDict_Status
        !           282: VDict_Curr_Delete(
        !           283:     [in] VDict  v_dict,
        !           284:     [out, unique] Record ** item
        !           285:     );
        !           286: 
        !           287: /*************************************************************************/
        !           288: /***                        Play oriented Functions ...                ***/
        !           289: /*************************************************************************/
        !           290: 
        !           291: VDict_Status
        !           292: VDict_X_Dict(
        !           293:     [in] VDict  v_dict
        !           294:     );
        !           295: 
        !           296: VDict_Status
        !           297: VDict_I_Dict(
        !           298:     [in] VDict  v_dict,
        !           299:     [in] short  size
        !           300:     );
        !           301: 
        !           302: }

unix.superglobalmegacorp.com

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