/* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */
This Assoctiation List class is closely related to the HTList Class as it simply is a list of a specific list element containing a characters based name/value pair. Lookups from association list can be case sensitive and or prefix based.
This module is implemented by HTAssoc.c, and it is a part of the W3C Sample Code Library.
#ifndef HTASSOC_H #define HTASSOC_H #include "HTList.h" #ifdef __cplusplus extern "C" { #endif typedef HTList HTAssocList; typedef struct { char * name; char * value; } HTAssoc;
These methods create and deletes and association list
extern HTAssocList * HTAssocList_new (void); extern BOOL HTAssocList_delete (HTAssocList * alist);
We have two methods for adding new elements - you can either add unconditionally or replace any existing element with the same name but a new value. In replacing an element, the search is case insensitive prefix match! A new list element is added to the beginning of the list so that it is the first element just after the head element.
extern BOOL HTAssocList_addObject ( HTAssocList * alist, const char * name, const char * value); extern BOOL HTAssocList_replaceObject ( HTAssocList * list, const char * name, const char * value);
Remove the element with the given name from the list. Search is case insensitive prefix match!
extern BOOL HTAssocList_removeObject ( HTAssocList * list, const char * name);
We have a small set of methods for searching a specific element within a list.
In many situations, the values of associations are case insensitive - use this method to search the list using case insensitive comparison. Also, you can search for matching prefixes and not the whole string, for example "foo" matches "football"
extern char * HTAssocList_findObject ( HTAssocList * alist, const char * name);
In case you want case insensitive, exact match
extern char * HTAssocList_findObjectExact ( HTAssocList * alist, const char * name);
In case you want case sensitive, prefix match
extern char * HTAssocList_findObjectCaseSensitive ( HTAssocList * list, const char * name);
And finally if you want case sensitive, exact match
extern char * HTAssocList_findObjectCaseSensitiveExact ( HTAssocList * list, const char * name);
Use this to get the name and value of a assoc object
#define HTAssoc_name(me) ((me) ? (me)->name : NULL) #define HTAssoc_value(me) ((me) ? (me)->value : NULL)
Fast macro to traverse the list. Call it first with copy of list header: it returns the first object and increments the passed list pointer. Call it with the same variable until it returns NULL.
#define HTAssocList_nextObject(me) \ ((me) && ((me) = (me)->next) ? (me)->object : NULL)
#ifdef __cplusplus } #endif #endif /* not HTASSOC_H */