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