|
|
#include "libjwgc.h"
Go to the source code of this file.
Defines | |
#define | XML_UNICODE_WCHAR_T |
#define | INIT_SIZE 64 |
Functions | |
NAMED * | lookup (HASH_TABLE *table, KEY name, size_t createSize) |
void | hashTableDestroy (HASH_TABLE *table) |
void | hashTableInit (HASH_TABLE *p) |
void | hashTableIterInit (HASH_TABLE_ITER *iter, const HASH_TABLE *table) |
NAMED * | hashTableIterNext (HASH_TABLE_ITER *iter) |
|
Definition at line 30 of file JHashTable.c. Referenced by lookup(). |
|
Definition at line 21 of file JHashTable.c. |
|
Definition at line 108 of file JHashTable.c. References hashTableDestroy(), HASH_TABLE::size, and HASH_TABLE::v. 00109 { 00110 size_t i; 00111 for (i = 0; i < table->size; i++) { 00112 NAMED *p = table->v[i]; 00113 if (p) 00114 free(p); 00115 } 00116 free(table->v); 00117 }
|
|
Definition at line 120 of file JHashTable.c. References hashTableInit(), HASH_TABLE::size, HASH_TABLE::used, HASH_TABLE::usedLim, and HASH_TABLE::v.
|
|
Definition at line 129 of file JHashTable.c. References HASH_TABLE_ITER::end, hashTableIterInit(), HASH_TABLE_ITER::p, HASH_TABLE::size, and HASH_TABLE::v.
|
|
Definition at line 136 of file JHashTable.c. References HASH_TABLE_ITER::end, hashTableIterNext(), and HASH_TABLE_ITER::p. 00137 { 00138 while (iter->p != iter->end) { 00139 NAMED *tem = *(iter->p)++; 00140 if (tem) 00141 return tem; 00142 } 00143 return 0; 00144 }
|
|
Definition at line 53 of file JHashTable.c. References INIT_SIZE, lookup(), NAMED::name, HASH_TABLE::size, HASH_TABLE::used, HASH_TABLE::usedLim, and HASH_TABLE::v. 00054 { 00055 size_t i; 00056 if (table->size == 0) { 00057 if (!createSize) 00058 return 0; 00059 table->v = calloc(INIT_SIZE, sizeof(NAMED *)); 00060 if (!table->v) 00061 return 0; 00062 table->size = INIT_SIZE; 00063 table->usedLim = INIT_SIZE / 2; 00064 i = hash(name) & (table->size - 1); 00065 } 00066 else { 00067 unsigned long h = hash(name); 00068 for (i = h & (table->size - 1); 00069 table->v[i]; 00070 i == 0 ? i = table->size - 1 : --i) { 00071 if (keyeq(name, table->v[i]->name)) 00072 return table->v[i]; 00073 } 00074 if (!createSize) 00075 return 0; 00076 if (table->used == table->usedLim) { 00077 /* check for overflow */ 00078 size_t newSize = table->size * 2; 00079 NAMED **newV = calloc(newSize, sizeof(NAMED *)); 00080 if (!newV) 00081 return 0; 00082 for (i = 0; i < table->size; i++) 00083 if (table->v[i]) { 00084 size_t j; 00085 for (j = hash(table->v[i]->name) & (newSize - 1); 00086 newV[j]; 00087 j == 0 ? j = newSize - 1 : --j); 00088 newV[j] = table->v[i]; 00089 } 00090 free(table->v); 00091 table->v = newV; 00092 table->size = newSize; 00093 table->usedLim = newSize / 2; 00094 for (i = h & (table->size - 1); 00095 table->v[i]; 00096 i == 0 ? i = table->size - 1 : --i); 00097 } 00098 } 00099 table->v[i] = calloc(1, createSize); 00100 if (!table->v[i]) 00101 return 0; 00102 table->v[i]->name = name; 00103 (table->used)++; 00104 return table->v[i]; 00105 }
|
Last updated at Tue Dec 18 21:07:42 PST 2007. | This site and project hosted by... |