|
|
|
nvl_util - Name/Value List UtilitiesThe NVL_UTIL package manages lists of name/value pairs. A name/value list is essentially an associative array of name/value pairs.
An empty list of name/value pairs is created as follows:
#include <stdio.h> -- Standard I/O definitions.
#include "nvl_util.h" -- Name/value pair lists.
NVList list ;
...
nvlCreate (NULL, &list) ;
Name/value pairs are then added to the list using nvlAdd():
nvlAdd (list, nvpNew ("THIS", NvpDouble, 123.45)) ;
nvlAdd (list, nvpNew ("THAT", NvpLong, 6789)) ;
The pairs in a list can be retrieved by index:
int i ;
NVPair pair ;
...
for (i = 0 ; i < nvlCount (list) ; i++) {
pair = nvlGet (list, i) ;
printf ("%s = %s\n", nvpName (pair), nvpString (pair)) ;
}
or by name:
pair = nvlFind (list, "THAT") ; -- Prints "THAT = 6789".
printf ("%s = %s\n", nvpName (pair), nvpString (pair)) ;
Individual pairs can be deleted from a list:
pair = nvlDelete (list, "THIS") ;
Although the pair is removed from the list, the pair itself is not destroyed. In contrast, deleting the entire list in one fell swoop:
nvlDestroy (list) ;
automatically destroys the remaining pairs via calls to
nvpDestroy().
For my own convenience, I added the "Prop" functions, which implement LISP-like property lists using name/value lists and string-valued name/value pairs:
NVList myCar ;
...
nvlCreate (NULL, &myCar) ;
nvlPutProp (myCar, "MAKE", "Triumph") ;
nvlPutProp (myCar, "MODEL", "TR-4") ;
nvlPutProp (myCar, "COLOR", "green") ;
printf ("I wish I had a %s %s %s.\n",
nvlGetProp (myCar, "COLOR"),
nvlGetProp (myCar, "MAKE"),
nvlGetProp (myCar, "MODEL")) ;
Using the "Prop" functions does not preclude using the regular NVL functions on the same list.
The name/value pair, name/value list, and version-independent message stream packages were inspired by Mike Maloney's C++ implementations of named variables and named variable sets, and by Robert Martin's attributed data trees (see "Version-Independent Messages" in Appendix B of his Designing Object-Oriented C++ Applications Using the Booch Method).
nvlAdd() - adds a name/value pair to a list.
nvlCount() - returns the number of name/value pairs in a list.
nvlCreate() - creates an empty name/value pair list.
nvlDelete() - deletes a name/value pair from a list.
nvlDestroy() - destroys a list.
nvlFind() - retrieves a pair by name from a list.
nvlGet() - retrieves a pair by index from a list.
nvlName() - returns a list's name.
xdr_NVList() - encodes/decodes a name/value pair list in XDR format.
nvlGetProp() - retrieves a property from a list.
nvlPutProp() - adds a property to a list.
nvlRemProp() - removes a property from a list.
nvl_util.c
nvl_util.h
(See libnet for the
complete source, including support routines and build files.)