|
| |||||||||||||
#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... |