17#include "NameToCharCode.h"
21struct NameToCharCodeEntry {
28NameToCharCode::NameToCharCode() {
33 tab = (NameToCharCodeEntry *)gmalloc(size * sizeof(NameToCharCodeEntry));
34 for (i = 0; i < size; ++i) {
39NameToCharCode::~NameToCharCode() {
42 for (i = 0; i < size; ++i) {
50void NameToCharCode::add( const char *name, CharCode c) {
51 NameToCharCodeEntry *oldTab;
55 if (len >= size / 2) {
59 tab = (NameToCharCodeEntry *)gmalloc(size * sizeof(NameToCharCodeEntry));
60 for (h = 0; h < size; ++h) {
63 for (i = 0; i < oldSize; ++i) {
65 h = hash(oldTab[i].name);
79 while (tab[h].name && strcmp(tab[h].name, name)) {
85 tab[h].name = copyString(name);
92CharCode NameToCharCode::lookup( const char *name) {
97 if (!strcmp(tab[h].name, name)) {
107int NameToCharCode::hash( const char *name) {
112 for (p = name; *p; ++p) {
113 h = 17 * h + (int)(*p & 0xff);
115 return ( int)(h % size);
|