1 #include <opensrf/osrf_big_hash.h>
3 osrfBigHash* osrfNewBigHash() {
4 osrfBigHash* hash = safe_malloc(sizeof(osrfBigHash));
5 hash->hash = (Pvoid_t) NULL;
10 void* osrfBigHashSet( osrfBigHash* hash, void* item, const char* key, ... ) {
11 if(!(hash && item && key )) return NULL;
14 VA_LIST_TO_STRING(key);
15 uint8_t idx[strlen(VA_BUF) + 1];
16 strcpy( idx, VA_BUF );
18 void* olditem = osrfBigHashRemove( hash, VA_BUF );
20 JSLI(value, hash->hash, idx);
21 if(value) *value = (Word_t) item;
26 void* osrfBigHashRemove( osrfBigHash* hash, const char* key, ... ) {
27 if(!(hash && key )) return NULL;
29 VA_LIST_TO_STRING(key);
32 uint8_t idx[strlen(VA_BUF) + 1];
33 strcpy( idx, VA_BUF );
37 JSLG( value, hash->hash, idx);
40 item = (void*) *value;
42 if( hash->freeItem ) {
43 hash->freeItem( (char*) idx, item );
50 JSLD( retcode, hash->hash, idx );
56 void* osrfBigHashGet( osrfBigHash* hash, const char* key, ... ) {
57 if(!(hash && key )) return NULL;
59 VA_LIST_TO_STRING(key);
62 uint8_t idx[strlen(VA_BUF) + 1];
63 strcpy( idx, VA_BUF );
65 JSLG( value, hash->hash, idx );
66 if(value) return (void*) *value;
71 osrfStringArray* osrfBigHashKeys( osrfBigHash* hash ) {
72 if(!hash) return NULL;
75 uint8_t idx[OSRF_HASH_MAXKEY];
78 osrfStringArray* strings = osrfNewStringArray(8);
80 JSLF( value, hash->hash, idx );
84 osrfStringArrayAdd( strings, key );
85 JSLN( value, hash->hash, idx );
92 unsigned long osrfBigHashGetCount( osrfBigHash* hash ) {
96 unsigned long count = 0;
97 uint8_t idx[OSRF_HASH_MAXKEY];
99 strcpy( (char*) idx, "");
100 JSLF(value, hash->hash, idx);
104 JSLN( value, hash->hash, idx );
110 void osrfBigHashFree( osrfBigHash* hash ) {
114 osrfStringArray* keys = osrfBigHashKeys( hash );
116 for( i = 0; i != keys->size; i++ ) {
117 char* key = (char*) osrfStringArrayGetString( keys, i );
118 osrfBigHashRemove( hash, key );
121 osrfStringArrayFree(keys);
127 osrfBigHashIterator* osrfNewBigHashIterator( osrfBigHash* hash ) {
128 if(!hash) return NULL;
129 osrfBigHashIterator* itr = safe_malloc(sizeof(osrfBigHashIterator));
135 void* osrfBigHashIteratorNext( osrfBigHashIterator* itr ) {
136 if(!(itr && itr->hash)) return NULL;
139 uint8_t idx[OSRF_HASH_MAXKEY];
141 if( itr->current == NULL ) { /* get the first item in the list */
143 JSLF( value, itr->hash->hash, idx );
146 strcpy(idx, itr->current);
147 JSLN( value, itr->hash->hash, idx );
152 itr->current = strdup((char*) idx);
153 return (void*) *value;
160 void osrfBigHashIteratorFree( osrfBigHashIterator* itr ) {
166 void osrfBigHashIteratorReset( osrfBigHashIterator* itr ) {