Tcl_NewDictObj creates a new, empty dictionary object. The string representation of the object will be invalid, and the reference count of the object will be zero.
Tcl_DictObjGet looks up the given key within the given dictionary and writes a pointer to the value associated with that key into the variable pointed to by valuePtrPtr, or a NULL if the key has no mapping within the dictionary. The result of this procedure is TCL_OK, or TCL_ERROR if the dictPtr cannot be converted to a dictionary.
Tcl_DictObjPut updates the given dictionary so that the given key maps to the given value; any key may exist at most once in any particular dictionary. The dictionary must not be shared, but the key and value may be. This procedure may increase the reference count of both key and value if it proves necessary to store them. Neither key nor value should be NULL. The result of this procedure is TCL_OK, or TCL_ERROR if the dictPtr cannot be converted to a dictionary.
Tcl_DictObjRemove updates the given dictionary so that the given key has no mapping to any value. The dictionary must not be shared, but the key may be. The key actually stored in the dictionary will have its reference count decremented if it was present. It is not an error if the key did not previously exist. The result of this procedure is TCL_OK, or TCL_ERROR if the dictPtr cannot be converted to a dictionary.
Tcl_DictObjSize updates the given variable with the number of key/value pairs currently in the given dictionary.The result of this procedure is TCL_OK, or TCL_ERROR if the dictPtr cannot be converted to a dictionary.
Tcl_DictObjFirst commences an iteration across all the key/value pairs in the given dictionary, placing the key and value in the variables pointed to by the keyPtrPtr and valuePtrPtr arguments (which may be NULL to indicate that the caller is uninterested in they key or variable respectively.) The next key/value pair in the dictionary may be retrieved with Tcl_DictObjNext. Concurrent updates of the dictionary's internal representation will not modify the iteration processing unless the dictionary is unshared, when this will trigger premature termination of the iteration instead (which Tcl scripts cannot trigger via the dict command.) The searchPtr argument points to a piece of context that is used to identify which particular iteration is being performed, and is initialised by the call to Tcl_DictObjFirst. The donePtr argument points to a variable that is updated to be zero of there are further key/value pairs to be iterated over, or non-zero if the iteration is complete. The order of iteration is implementation-defined. If the dictPtr argument cannot be converted to a dictionary, Tcl_DictObjFirst returns TCL_ERROR and the iteration is not commenced, and otherwise it returns TCL_OK.
If the last call to Tcl_DictObjFirst or Tcl_DictObjNext (for a particular searchPtr) set the variable indicated by the donePtr argument to zero but no further key/value pairs are desired from that particular iteration, the searchPtr argument must be passed to Tcl_DictObjDone to release any internal locks held by the searching process.
The procedures Tcl_DictObjPutKeyList and Tcl_DictObjRemoveKeyList are the close analogues of Tcl_DictObjPut and Tcl_DictObjRemove respectively, except that instead of working with a single dictionary, they are designed to operate on a nested tree of dictionaries, with inner dictionaries stored as values inside outer dictionaries. The keyc and keyv arguments specify a list of keys (with outermost keys first) that acts as a path to the key/value pair to be affected. Note that there is no corresponding operation for reading a value for a path as this is easy to construct from repeated use of Tcl_DictObjGet.
Copyright © 2003 Donal K. Fellows Copyright © 1995-1997 Roger E. Critchlow Jr.