31 #define DISABLE_DEBUGLOG
34 #include "idlist64_p.h"
35 #include <gwenhywfar/debug.h>
50 idt->freeEntries=GWEN_IDTABLE64_MAXENTRIES;
58 assert(idt->refCount);
59 if (--(idt->refCount)==0) {
68 void GWEN_IdTable64_Attach(GWEN_IDTABLE64 *idt){
70 assert(idt->refCount);
80 for (i=0; i<GWEN_IDTABLE64_MAXENTRIES; i++) {
81 if (idt->entries[i]==0) {
93 if (idt->freeEntries) {
96 i=GWEN_IDTABLE64_MAXENTRIES-idt->freeEntries;
110 for (i=0; i<GWEN_IDTABLE64_MAXENTRIES; i++) {
111 if (idt->entries[i]==
id) {
123 for (i=0; i<GWEN_IDTABLE64_MAXENTRIES; i++) {
124 if (idt->entries[i]==
id) {
136 return GWEN_IDTABLE64_MAXENTRIES==idt->freeEntries;
142 return idt->freeEntries==0;
148 return GWEN_IDTABLE64_MAXENTRIES-idt->freeEntries;
158 for (i=0; i<GWEN_IDTABLE64_MAXENTRIES; i++) {
159 if (idt->entries[i]!=0) {
161 return idt->entries[i];
172 for (i=idt->current+1; i<GWEN_IDTABLE64_MAXENTRIES; i++) {
173 if (idt->entries[i]!=0) {
175 return idt->entries[i];
178 idt->current=GWEN_IDTABLE64_MAXENTRIES;
188 for (i=0; i<GWEN_IDTABLE64_MAXENTRIES; i++) {
189 if (idt->entries[i]!=0) {
191 return idt->entries[i];
203 for (i=(*tabIdx)+1; i<GWEN_IDTABLE64_MAXENTRIES; i++) {
204 if (idt->entries[i]!=0) {
206 return idt->entries[i];
229 assert(idl->refCount);
237 assert(idl->refCount);
238 if (idl->refCount==1) {
251 GWEN_IDTABLE64 **tablePtr;
256 tablePtr=idl->pIdTablePointers;
257 for (idx=0, tablePtr=idl->pIdTablePointers; idx<idl->idTableCount; idx++, tablePtr++) {
262 if (idx>=idl->idTableCount) {
264 GWEN_IDTABLE64 **newPtr;
267 newCount=idl->idTableCount+GWEN_IDLIST64_STEP;
268 newPtr=(GWEN_IDTABLE64 **)realloc(idl->pIdTablePointers,
sizeof(GWEN_IDTABLE64*)*newCount);
271 memset((
void*)(newPtr+idl->idTableCount),
273 sizeof(GWEN_IDTABLE64*)*(newCount-idl->idTableCount));
274 idl->pIdTablePointers=newPtr;
275 idl->pIdTablePointers[idl->idTableCount]=idt;
276 idl->lastTableIdx=idl->idTableCount;
277 idl->idTableCount=newCount;
280 idl->pIdTablePointers[idx]=idt;
281 idl->lastTableIdx=idx;
288 GWEN_IDTABLE64 *idt=
NULL;
289 GWEN_IDTABLE64 **tablePtr;
294 if (idl->pIdTablePointers==
NULL) {
296 idl->pIdTablePointers=(GWEN_IDTABLE64 **) malloc(
sizeof(GWEN_IDTABLE64*)*GWEN_IDLIST64_STEP);
297 assert(idl->pIdTablePointers);
298 memset(idl->pIdTablePointers, 0,
sizeof(GWEN_IDTABLE64*)*GWEN_IDLIST64_STEP);
299 idl->idTableCount=GWEN_IDLIST64_STEP;
302 for (idx=0, tablePtr=idl->pIdTablePointers; idx<idl->idTableCount; idx++, tablePtr++) {
308 if (idx>=idl->idTableCount) {
321 if (idl->pIdTablePointers) {
322 GWEN_IDTABLE64 *idt=
NULL;
323 GWEN_IDTABLE64 **tablePtr;
326 for (idx=0, tablePtr=idl->pIdTablePointers; idx<idl->idTableCount; idx++, tablePtr++) {
343 if (idl->pIdTablePointers) {
344 GWEN_IDTABLE64 *idt=
NULL;
345 GWEN_IDTABLE64 **tablePtr;
348 for (idx=0, tablePtr=idl->pIdTablePointers; idx<idl->idTableCount; idx++, tablePtr++) {
361 GWEN_IDTABLE64 *idt=
NULL;
362 GWEN_IDTABLE64 **tablePtr;
365 for (idx=0, tablePtr=idl->pIdTablePointers; idx<idl->idTableCount; idx++, tablePtr++) {
377 if (idl->pIdTablePointers) {
378 GWEN_IDTABLE64 *idt=
NULL;
379 GWEN_IDTABLE64 **tablePtr;
382 for (idx=0, tablePtr=idl->pIdTablePointers; idx<idl->idTableCount; idx++, tablePtr++) {
389 free(idl->pIdTablePointers);
390 idl->pIdTablePointers=
NULL;
399 uint64_t a=*((
const uint64_t*)pa);
400 uint64_t b=*((
const uint64_t*)pb);
413 uint64_t a=*((
const uint64_t*)pa);
414 uint64_t b=*((
const uint64_t*)pb);
428 assert(idl->refCount);
429 if (idl->pIdTablePointers && idl->entryCount) {
441 ptr=(uint64_t*)malloc(
sizeof(uint64_t)*cnt);
445 for (i=0; i<cnt; i++) {
466 for (i=0; i<cnt; i++) {
494 nidl->idTableCount=idl->idTableCount;
495 nidl->entryCount=idl->entryCount;
496 if (idl->pIdTablePointers) {
497 for (idx=0; idx<idl->idTableCount; idx++) {
500 idt=idl->pIdTablePointers[idx];
502 GWEN_IDTABLE64 *nidt;
505 memmove(nidt->entries, idt->entries, GWEN_IDTABLE64_MAXENTRIES*
sizeof(uint64_t));
506 nidt->freeEntries=idt->freeEntries;
519 assert(idl->refCount);
521 return idl->entryCount;
527 GWEN_IDTABLE64 *idt=
NULL;
528 GWEN_IDTABLE64 **tablePtr;
533 for (idx=0, tablePtr=idl->pIdTablePointers; idx<idl->idTableCount; idx++, tablePtr++) {
539 for (i=0; i<GWEN_IDTABLE64_MAXENTRIES; i++) {
540 if (idt->entries[i]!=0) {
547 idIndex+=GWEN_IDTABLE64_MAXENTRIES;
558 uint64_t tableNum=*pos / GWEN_IDTABLE64_MAXENTRIES;
559 uint64_t tableIdx=*pos % GWEN_IDTABLE64_MAXENTRIES;
560 GWEN_IDTABLE64 **tablePtr;
564 if (tableNum>idl->idTableCount) {
570 idIndex=(tableNum*GWEN_IDTABLE64_MAXENTRIES);
571 for (idx=tableNum, tablePtr=idl->pIdTablePointers+tableNum; idx<idl->idTableCount; idx++, tablePtr++) {
578 for (i=tableIdx; i<GWEN_IDTABLE64_MAXENTRIES; i++) {
579 if (idt->entries[i]!=0) {
587 for (i=0; i<GWEN_IDTABLE64_MAXENTRIES; i++) {
588 if (idt->entries[i]!=0) {
596 idIndex+=GWEN_IDTABLE64_MAXENTRIES;
669 GWEN_IDTABLE64 *idt=
NULL;
673 if (idl->pIdTablePointers==
NULL) {
675 idl->pIdTablePointers=(GWEN_IDTABLE64 **) malloc(
sizeof(GWEN_IDTABLE64*)*GWEN_IDLIST64_STEP);
676 assert(idl->pIdTablePointers);
677 memset(idl->pIdTablePointers, 0,
sizeof(GWEN_IDTABLE64*)*GWEN_IDLIST64_STEP);
678 idl->idTableCount=GWEN_IDLIST64_STEP;
681 idt=idl->pIdTablePointers[idl->lastTableIdx];
696 uint64_t tableNum=idx / GWEN_IDTABLE64_MAXENTRIES;
697 uint64_t tableIdx=idx % GWEN_IDTABLE64_MAXENTRIES;
700 if (tableNum>idl->idTableCount) {
705 idt=idl->pIdTablePointers[tableNum];
711 return idt->entries[tableIdx];