43 Table =
new OucTable[(
unsigned int)maxe];
44 maxnum = maxe; curnum = 0; avlnum = 0;
45 for (i = 1; i < maxe; i++) Table[i-1].Fnum = i;
46 Table[maxe-1].Fnum = -1;
55 if (i >= 0) {avlnum = Table[i].Fnum;
56 if (i >= curnum) curnum = i+1;
67 T *
Apply(
int (*func)(T *,
void *),
void *Arg,
int Start=0)
69 for (i = Start; i < curnum; i++)
70 if (Table[i].
Item && (*func)(Table[i].
Item, Arg))
80 if ((temp =
Remove(Tnum)))
delete temp;
85 if ((temp =
Remove(key)))
delete temp;
93 T *
Find(
const char *key,
int *Tnum=0)
95 for (i = 0; i < curnum; i++)
96 if (Table[i].
Item && Table[i].Key && !strcmp(Table[i].Key, key))
97 {
if (Tnum) *Tnum = i;
return Table[i].Item;}
106 {
if ((Tnum < 0 && ((Tnum =
Alloc()) < 0)) || Tnum >= maxnum)
return -1;
107 Table[Tnum].Item =
Item; Table[Tnum].Key = strdup(key);
114 T *
Item(
int Tnum,
char **ikey=0)
115 {
if (Tnum < 0 || Tnum >= curnum || !Table[Tnum].
Item)
return (T *)0;
116 if (ikey) *ikey = Table[Tnum].Key;
117 return Table[Tnum].Item;
124 for (i = Tnum; i < curnum; i++)
125 if (Table[i].
Item) {Tnum = i+1;
return i;}
134 if (Tnum < 0 || Tnum >= curnum || !Table[Tnum].
Item)
return (T *)0;
135 if (Table[Tnum].Key) free(Table[Tnum].Key);
136 temp = Table[Tnum].Item; Table[Tnum].Item = 0;
137 Table[Tnum].Fnum = avlnum;
139 if (Tnum == (curnum-1))
140 while(curnum && Table[curnum].
Item == 0) curnum--;
150 struct OucTable {T *
Item;
153 OucTable() {
Item = 0; Key = 0;}
154 ~OucTable() {
if (
Item) {
delete Item;
if (Key) free(Key);}}
T * Find(const char *key, int *Tnum=0)
T * Apply(int(*func)(T *, void *), void *Arg, int Start=0)
T * Item(int Tnum, char **ikey=0)
void Delete(const char *key)
int Insert(T *Item, const char *key=0, int Tnum=-1)
T * Remove(const char *key)