|
| |||||||||||||
#include "mit-copyright.h"#include "ulong_dictionary.h"#include "new_string.h"#include "main.h"Go to the source code of this file.
Defines | |
| #define | NULL 0 |
Functions | |
| ulong_dictionary | ulong_dictionary_Create (int size) |
| void | ulong_dictionary_Destroy (ulong_dictionary d) |
| void | ulong_dictionary_Enumerate (ulong_dictionary d, void(*)() proc) |
| ulong_dictionary_binding * | ulong_dictionary_Lookup (ulong_dictionary d, char *key) |
| ulong_dictionary_binding * | ulong_dictionary_Define (ulong_dictionary d, char *key, int *already_existed) |
| void | ulong_dictionary_Delete (ulong_dictionary d, ulong_dictionary_binding *b) |
|
|
Definition at line 46 of file ulong_dictionary.c. |
|
|
Definition at line 62 of file ulong_dictionary.c. References _ulong_dictionary::size, _ulong_dictionary::slots, ulong_dictionary, and ulong_dictionary_binding. 00064 {
00065 int i;
00066 ulong_dictionary result;
00067
00068 result = (ulong_dictionary) malloc(sizeof(struct _ulong_dictionary));
00069 result->size = size;
00070 result->slots = (ulong_dictionary_binding **) malloc(
00071 size * sizeof(ulong_dictionary_binding *));
00072
00073 for (i = 0; i < size; i++)
00074 result->slots[i] = NULL;
00075
00076 return (result);
00077 }
|
|
||||||||||||||||
|
Definition at line 207 of file ulong_dictionary.c. References _ulong_dictionary_binding::key, _ulong_dictionary_binding::next, string_Copy, string_Eq, ulong_dictionary, and ulong_dictionary_binding. 00211 {
00212 ulong_dictionary_binding **ptr_to_the_slot, *binding_ptr;
00213
00214 ptr_to_the_slot = &(d->slots[dictionary__hash(key) % (d->size)]);
00215
00216 binding_ptr = *ptr_to_the_slot;
00217 while (binding_ptr) {
00218 if (string_Eq(binding_ptr->key, key)) {
00219 if (already_existed)
00220 *already_existed = 1;
00221 return (binding_ptr);
00222 }
00223 binding_ptr = binding_ptr->next;
00224 }
00225
00226 if (already_existed)
00227 *already_existed = 0;
00228 binding_ptr = (ulong_dictionary_binding *) malloc(
00229 sizeof(ulong_dictionary_binding));
00230 binding_ptr->next = *ptr_to_the_slot;
00231 binding_ptr->key = string_Copy(key);
00232 *ptr_to_the_slot = binding_ptr;
00233 return (binding_ptr);
00234 }
|
|
||||||||||||
|
Definition at line 247 of file ulong_dictionary.c. References _ulong_dictionary_binding::key, _ulong_dictionary_binding::next, ulong_dictionary, and ulong_dictionary_binding. 00250 {
00251 ulong_dictionary_binding **ptr_to_binding_ptr;
00252
00253 ptr_to_binding_ptr = &(d->slots[dictionary__hash(b->key) % (d->size)]);
00254
00255 while (*ptr_to_binding_ptr != b)
00256 ptr_to_binding_ptr = &((*ptr_to_binding_ptr)->next);
00257
00258 *ptr_to_binding_ptr = b->next;
00259 free(b->key);
00260 free(b);
00261 }
|
|
|
Definition at line 91 of file ulong_dictionary.c. References _ulong_dictionary_binding::key, _ulong_dictionary_binding::next, ulong_dictionary, and ulong_dictionary_binding. 00093 {
00094 int i;
00095 ulong_dictionary_binding *binding_ptr, *new_binding_ptr;
00096
00097 for (i = 0; i < d->size; i++) {
00098 binding_ptr = d->slots[i];
00099 while (binding_ptr) {
00100 new_binding_ptr = binding_ptr->next;
00101 free(binding_ptr->key);
00102 free(binding_ptr);
00103 binding_ptr = new_binding_ptr;
00104 }
00105 }
00106 free(d->slots);
00107 free(d);
00108 }
|
|
||||||||||||
|
Definition at line 122 of file ulong_dictionary.c. References _ulong_dictionary_binding::next, ulong_dictionary, and ulong_dictionary_binding. 00125 {
00126 int i;
00127 ulong_dictionary_binding *binding_ptr;
00128
00129 for (i = 0; i < d->size; i++) {
00130 binding_ptr = d->slots[i];
00131 while (binding_ptr) {
00132 proc(binding_ptr);
00133 binding_ptr = binding_ptr->next;
00134 }
00135 }
00136 }
|
|
||||||||||||
|
Definition at line 174 of file ulong_dictionary.c. References _ulong_dictionary_binding::key, _ulong_dictionary_binding::next, string_Eq, ulong_dictionary, and ulong_dictionary_binding. 00177 {
00178 ulong_dictionary_binding *binding_ptr;
00179
00180 binding_ptr = d->slots[dictionary__hash(key) % (d->size)];
00181 while (binding_ptr) {
00182 if (string_Eq(key, binding_ptr->key))
00183 return (binding_ptr);
00184 binding_ptr = binding_ptr->next;
00185 }
00186
00187 return (NULL);
00188 }
|
| Last updated at Tue Dec 18 21:07:42 PST 2007. | This site and project hosted by... |