1 //========================================================================
5 // Copyright 2001-2003 Glyph & Cog, LLC
7 //========================================================================
11 #ifdef USE_GCC_PRAGMAS
12 #pragma implementation
17 #include "NameToCharCode.h"
19 //------------------------------------------------------------------------
21 struct NameToCharCodeEntry {
26 //------------------------------------------------------------------------
28 NameToCharCode::NameToCharCode() {
33 tab = (NameToCharCodeEntry *)gmallocn(size, sizeof(NameToCharCodeEntry));
34 for (i = 0; i < size; ++i) {
39 NameToCharCode::~NameToCharCode() {
42 for (i = 0; i < size; ++i) {
50 void NameToCharCode::add(char *name, CharCode c) {
51 NameToCharCodeEntry *oldTab;
54 // expand the table if necessary
55 if (len >= size / 2) {
59 tab = (NameToCharCodeEntry *)gmallocn(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);
92 CharCode NameToCharCode::lookup(char *name) {
97 if (!strcmp(tab[h].name, name)) {
107 int NameToCharCode::hash(char *name) {
112 for (p = name; *p; ++p) {
113 h = 17 * h + (int)(*p & 0xff);
115 return (int)(h % size);