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

JHashTable.c File Reference

#include "libjwgc.h"

Go to the source code of this file.

Defines

#define XML_UNICODE_WCHAR_T
#define INIT_SIZE   64

Functions

NAMEDlookup (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)
NAMEDhashTableIterNext (HASH_TABLE_ITER *iter)


Define Documentation

#define INIT_SIZE   64
 

Definition at line 30 of file JHashTable.c.

Referenced by lookup().

#define XML_UNICODE_WCHAR_T
 

Definition at line 21 of file JHashTable.c.


Function Documentation

void hashTableDestroy HASH_TABLE table  ) 
 

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 }

void hashTableInit HASH_TABLE p  ) 
 

Definition at line 120 of file JHashTable.c.

References hashTableInit(), HASH_TABLE::size, HASH_TABLE::used, HASH_TABLE::usedLim, and HASH_TABLE::v.

00121 {
00122         p->size = 0;
00123         p->usedLim = 0;
00124         p->used = 0;
00125         p->v = 0;
00126 }

void hashTableIterInit HASH_TABLE_ITER iter,
const HASH_TABLE table
 

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.

00130 {
00131         iter->p = table->v;
00132         iter->end = iter->p + table->size;
00133 }

NAMED* hashTableIterNext HASH_TABLE_ITER iter  ) 
 

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 }

NAMED* lookup HASH_TABLE table,
KEY  name,
size_t  createSize
 

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...SourceForge.net Logo

Source Perspective by Fisheye