Jabber WindowGram Client (JWGC)

Introduction Screenshots Installation Downloads
Documentation Browse Source Resources Project Site

Stable Version
-none-

Latest Version
beta5



Main Page | Alphabetical List | Data Structures | Directories | File List | Data Fields | Globals

port_dictionary.c File Reference

#include "mit-copyright.h"
#include "port_dictionary.h"
#include "new_string.h"
#include "main.h"

Go to the source code of this file.

Functions

port_dictionary port_dictionary_Create (int size)
void port_dictionary_Destroy (port_dictionary d)
void port_dictionary_Enumerate (port_dictionary d, void(*)() proc)
port_dictionary_bindingport_dictionary_Lookup (port_dictionary d, char *key)
port_dictionary_bindingport_dictionary_Define (port_dictionary d, char *key, int *already_existed)
void port_dictionary_Delete (port_dictionary d, port_dictionary_binding *b)


Function Documentation

port_dictionary port_dictionary_Create int  size  ) 
 

Definition at line 62 of file port_dictionary.c.

References port_dictionary, port_dictionary_binding, _port_dictionary::size, and _port_dictionary::slots.

00064 {
00065         int i;
00066         port_dictionary result;
00067 
00068         result = (port_dictionary) malloc(sizeof(struct _port_dictionary));
00069         result->size = size;
00070         result->slots = (port_dictionary_binding **) malloc(
00071                                 size * sizeof(port_dictionary_binding *));
00072 
00073         for (i = 0; i < size; i++)
00074                 result->slots[i] = NULL;
00075 
00076         return (result);
00077 }

port_dictionary_binding* port_dictionary_Define port_dictionary  d,
char *  key,
int *  already_existed
 

Definition at line 207 of file port_dictionary.c.

References _port_dictionary_binding::key, _port_dictionary_binding::next, port_dictionary, port_dictionary_binding, string_Copy, and string_Eq.

00211 {
00212         port_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 = (port_dictionary_binding *) malloc(
00229                                          sizeof(port_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 }

void port_dictionary_Delete port_dictionary  d,
port_dictionary_binding b
 

Definition at line 247 of file port_dictionary.c.

References _port_dictionary_binding::key, _port_dictionary_binding::next, port_dictionary, and port_dictionary_binding.

00250 {
00251         port_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 }

void port_dictionary_Destroy port_dictionary  d  ) 
 

Definition at line 91 of file port_dictionary.c.

References _port_dictionary_binding::key, _port_dictionary_binding::next, port_dictionary, and port_dictionary_binding.

00093 {
00094         int i;
00095         port_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 }

void port_dictionary_Enumerate port_dictionary  d,
void (*) ( )  proc
 

Definition at line 122 of file port_dictionary.c.

References _port_dictionary_binding::next, port_dictionary, and port_dictionary_binding.

00125 {
00126         int i;
00127         port_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 }

port_dictionary_binding* port_dictionary_Lookup port_dictionary  d,
char *  key
 

Definition at line 174 of file port_dictionary.c.

References _port_dictionary_binding::key, _port_dictionary_binding::next, port_dictionary, port_dictionary_binding, and string_Eq.

00177 {
00178         port_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...SourceForge.net Logo

Source Perspective by Fisheye