3c709d5af48237eee5207570e178ca51eb191345
[OpenSRF.git] / include / opensrf / osrf_hash.h
1 #ifndef OSRF_HASH_H
2 #define OSRF_HASH_H
3
4 /**
5         @file osrf_hash.h
6         @brief A hybrid between a hash table and a doubly linked list.
7
8         The hash table supports random lookups by key.  The list supports iterative traversals.
9         The sequence of entries in the list reflects the sequence in which the keys were added.
10
11         osrfHashIterators are somewhat unusual in that, if an iterator is positioned on a given
12         entry, deletion of that entry does not invalidate the iterator.  The entry to which it
13         points is logically but not physically deleted.  You can still advance the iterator to the
14         next entry in the list.
15 */
16 #include <opensrf/utils.h>
17 #include <opensrf/string_array.h>
18 #include <opensrf/osrf_list.h>
19
20 #ifdef __cplusplus
21 extern "C" {
22 #endif
23
24 struct _osrfHashStruct;
25 typedef struct _osrfHashStruct osrfHash;
26
27 struct _osrfHashIteratorStruct;
28 typedef struct _osrfHashIteratorStruct osrfHashIterator;
29
30 osrfHash* osrfNewHash();
31
32 void osrfHashSetCallback( osrfHash* hash, void (*callback) (char* key, void* item) );
33
34 void* osrfHashSet( osrfHash* hash, void* item, const char* key, ... );
35
36 void* osrfHashRemove( osrfHash* hash, const char* key, ... );
37
38 void* osrfHashGet( osrfHash* hash, const char* key );
39
40 void* osrfHashGetFmt( osrfHash* hash, const char* key, ... );
41
42 osrfStringArray* osrfHashKeys( osrfHash* hash );
43
44 void osrfHashFree( osrfHash* hash );
45
46 unsigned long osrfHashGetCount( osrfHash* hash );
47
48 osrfHashIterator* osrfNewHashIterator( osrfHash* hash );
49
50 int osrfHashIteratorHasNext( osrfHashIterator* itr );
51
52 void* osrfHashIteratorNext( osrfHashIterator* itr );
53
54 const char* osrfHashIteratorKey( const osrfHashIterator* itr );
55
56 void osrfHashIteratorFree( osrfHashIterator* itr );
57
58 void osrfHashIteratorReset( osrfHashIterator* itr );
59
60 #ifdef __cplusplus
61 }
62 #endif
63
64 #endif