35 #include <gwenhywfar/misc.h>
36 #include <gwenhywfar/debug.h>
80 assert(map->setPairFn);
81 return map->setPairFn(map,
id, ptr);
89 assert(map->setPairFn);
90 return map->setPairFn(map,
id, 0);
97 assert(map->getPairFn);
98 return map->getPairFn(map,
id);
106 assert(map->findFirstFn);
107 return map->findFirstFn(map, pid);
115 assert(map->findNextFn);
116 return map->findNextFn(map, pid);
131 map->freeDataFn(map);
149 map->dumpFn(map, f, indent);
167 GWEN_IDMAP_HEX4 *xmap;
171 map->algoData=(
void*)xmap;
183 GWEN_IDMAP_HEX4 *xmap;
185 xmap=(GWEN_IDMAP_HEX4*)map->algoData;
194 GWEN_IDMAP_HEX4_TABLE *t;
198 t->isPtrTable=isPtrTable;
206 if (!(t->isPtrTable)) {
209 for(i=0; i<16; i++) {
223 GWEN_IDMAP_HEX4 *xmap;
225 GWEN_IDMAP_HEX4_TABLE *t;
227 xmap=(GWEN_IDMAP_HEX4*)map->algoData;
230 p=&(t->ptrs[(
id>>28) & 0xf]);
236 t=(GWEN_IDMAP_HEX4_TABLE*) *p;
238 p=&(t->ptrs[(
id>>24) & 0xf]);
244 t=(GWEN_IDMAP_HEX4_TABLE*) *p;
246 p=&(t->ptrs[(
id>>20) & 0xf]);
252 t=(GWEN_IDMAP_HEX4_TABLE*) *p;
254 p=&(t->ptrs[(
id>>16) & 0xf]);
260 t=(GWEN_IDMAP_HEX4_TABLE*) *p;
262 p=&(t->ptrs[(
id>>12) & 0xf]);
268 t=(GWEN_IDMAP_HEX4_TABLE*) *p;
270 p=&(t->ptrs[(
id>>8) & 0xf]);
276 t=(GWEN_IDMAP_HEX4_TABLE*) *p;
278 p=&(t->ptrs[(
id>>4) & 0xf]);
284 t=(GWEN_IDMAP_HEX4_TABLE*) *p;
286 p=&(t->ptrs[
id & 0xf]);
294 GWEN_IDMAP_HEX4_TABLE *parent;
301 for (i=0; i<16; i++) {
309 parent->ptrs[
id & 0xf]=0;
322 GWEN_IDMAP_HEX4 *xmap;
323 GWEN_IDMAP_HEX4_TABLE *t;
325 xmap=(GWEN_IDMAP_HEX4*)map->algoData;
330 t=(GWEN_IDMAP_HEX4_TABLE*)(t->ptrs[(
id>>28)&0xf]);
333 t=(GWEN_IDMAP_HEX4_TABLE*)(t->ptrs[(
id>>24)&0xf]);
336 t=(GWEN_IDMAP_HEX4_TABLE*)(t->ptrs[(
id>>20)&0xf]);
339 t=(GWEN_IDMAP_HEX4_TABLE*)(t->ptrs[(
id>>16)&0xf]);
342 t=(GWEN_IDMAP_HEX4_TABLE*)(t->ptrs[(
id>>12)&0xf]);
345 t=(GWEN_IDMAP_HEX4_TABLE*)(t->ptrs[(
id>>8)&0xf]);
348 t=(GWEN_IDMAP_HEX4_TABLE*)(t->ptrs[(
id>>4)&0xf]);
352 return (t->ptrs[
id & 0xf]);
361 p=&(t->ptrs[(
id>>28) & 0xf]);
364 t=(GWEN_IDMAP_HEX4_TABLE*) *p;
366 p=&(t->ptrs[(
id>>24) & 0xf]);
369 t=(GWEN_IDMAP_HEX4_TABLE*) *p;
371 p=&(t->ptrs[(
id>>20) & 0xf]);
374 t=(GWEN_IDMAP_HEX4_TABLE*) *p;
376 p=&(t->ptrs[(
id>>16) & 0xf]);
379 t=(GWEN_IDMAP_HEX4_TABLE*) *p;
381 p=&(t->ptrs[(
id>>12) & 0xf]);
384 t=(GWEN_IDMAP_HEX4_TABLE*) *p;
386 p=&(t->ptrs[(
id>>8) & 0xf]);
389 t=(GWEN_IDMAP_HEX4_TABLE*) *p;
391 p=&(t->ptrs[(
id>>4) & 0xf]);
394 t=(GWEN_IDMAP_HEX4_TABLE*) *p;
408 for (i=0; i<16; i++) {
418 GWEN_IDMAP_HEX4_TABLE *dt;
444 while (t && (
id & 0xf)==0xf) {
453 for (i=
id & 0xf; i<16; i++) {
457 lid=((
id & 0xfffffff0) | i);
463 GWEN_IDMAP_HEX4_TABLE *dt;
487 GWEN_IDMAP_HEX4_TABLE *t;
488 GWEN_IDMAP_HEX4 *xmap;
491 xmap=(GWEN_IDMAP_HEX4*)map->algoData;
506 GWEN_IDMAP_HEX4_TABLE *t;
507 GWEN_IDMAP_HEX4 *xmap;
510 xmap=(GWEN_IDMAP_HEX4*)map->algoData;
531 for (i=0; i<16; i++) {
535 for (j=0; j<indent; j++)
537 fprintf(f,
"Id: %01x Ptr: %p\n",
539 if (!(tbl->isPtrTable))
548 GWEN_IDMAP_HEX4 *xmap;
550 xmap=(GWEN_IDMAP_HEX4*)map->algoData;