31 #define DISABLE_DEBUGLOG 33 #include "idlist64_p.h" 34 #include <gwenhywfar/debug.h> 57 idt->freeEntries=GWEN_IDTABLE64_MAXENTRIES;
66 assert(idt->refCount);
67 if (--(idt->refCount)==0) {
76 void GWEN_IdTable64_Attach(GWEN_IDTABLE64 *idt)
79 assert(idt->refCount);
90 for (i=0; i<GWEN_IDTABLE64_MAXENTRIES; i++) {
91 if (idt->entries[i]==0) {
104 if (idt->freeEntries) {
107 i=GWEN_IDTABLE64_MAXENTRIES-idt->freeEntries;
122 for (i=0; i<GWEN_IDTABLE64_MAXENTRIES; i++) {
123 if (idt->entries[i]==
id) {
136 for (i=0; i<GWEN_IDTABLE64_MAXENTRIES; i++) {
137 if (idt->entries[i]==
id) {
150 return GWEN_IDTABLE64_MAXENTRIES==idt->freeEntries;
157 return idt->freeEntries==0;
162 static inline unsigned int GWEN_IdTable64_GetCount(
const GWEN_IDTABLE64 *idt)
164 return GWEN_IDTABLE64_MAXENTRIES-idt->freeEntries;
169 static inline uint64_t GWEN_IdTable64_GetFirstId(GWEN_IDTABLE64 *idt)
175 for (i=0; i<GWEN_IDTABLE64_MAXENTRIES; i++) {
176 if (idt->entries[i]!=0) {
178 return idt->entries[i];
186 static inline uint64_t GWEN_IdTable64_GetNextId(GWEN_IDTABLE64 *idt)
190 for (i=idt->current+1; i<GWEN_IDTABLE64_MAXENTRIES; i++) {
191 if (idt->entries[i]!=0) {
193 return idt->entries[i];
196 idt->current=GWEN_IDTABLE64_MAXENTRIES;
202 static inline uint64_t GWEN_IdTable64_GetFirstId2(
const GWEN_IDTABLE64 *idt,
207 for (i=0; i<GWEN_IDTABLE64_MAXENTRIES; i++) {
208 if (idt->entries[i]!=0) {
210 return idt->entries[i];
218 static inline uint64_t GWEN_IdTable64_GetNextId2(
const GWEN_IDTABLE64 *idt,
223 for (i=(*tabIdx)+1; i<GWEN_IDTABLE64_MAXENTRIES; i++) {
224 if (idt->entries[i]!=0) {
226 return idt->entries[i];
251 assert(idl->refCount);
260 assert(idl->refCount);
261 if (idl->refCount==1) {
275 GWEN_IDTABLE64 **tablePtr;
280 tablePtr=idl->pIdTablePointers;
281 for (idx=0, tablePtr=idl->pIdTablePointers; idx<idl->idTableCount; idx++, tablePtr++) {
286 if (idx>=idl->idTableCount) {
288 GWEN_IDTABLE64 **newPtr;
291 newCount=idl->idTableCount+GWEN_IDLIST64_STEP;
292 newPtr=(GWEN_IDTABLE64 **)realloc(idl->pIdTablePointers,
sizeof(GWEN_IDTABLE64 *)*newCount);
295 memset((
void *)(newPtr+idl->idTableCount),
297 sizeof(GWEN_IDTABLE64 *)*(newCount-idl->idTableCount));
298 idl->pIdTablePointers=newPtr;
299 idl->pIdTablePointers[idl->idTableCount]=idt;
300 idl->lastTableIdx=idl->idTableCount;
301 idl->idTableCount=newCount;
304 idl->pIdTablePointers[idx]=idt;
305 idl->lastTableIdx=idx;
313 #ifdef GWEN_IDLIST64_COMPACT 314 GWEN_IDTABLE64 *idt=
NULL;
315 GWEN_IDTABLE64 **tablePtr;
320 if (idl->pIdTablePointers==
NULL) {
322 idl->pIdTablePointers=(GWEN_IDTABLE64 **) malloc(
sizeof(GWEN_IDTABLE64 *)*GWEN_IDLIST64_STEP);
323 assert(idl->pIdTablePointers);
324 memset(idl->pIdTablePointers, 0,
sizeof(GWEN_IDTABLE64 *)*GWEN_IDLIST64_STEP);
325 idl->idTableCount=GWEN_IDLIST64_STEP;
328 for (idx=0, tablePtr=idl->pIdTablePointers; idx<idl->idTableCount; idx++, tablePtr++) {
334 if (idx>=idl->idTableCount) {
342 GWEN_IDTABLE64 *idt=
NULL;
347 if (idl->pIdTablePointers==
NULL) {
349 idl->pIdTablePointers=(GWEN_IDTABLE64 **) malloc(
sizeof(GWEN_IDTABLE64 *)*GWEN_IDLIST64_STEP);
350 assert(idl->pIdTablePointers);
351 memset(idl->pIdTablePointers, 0,
sizeof(GWEN_IDTABLE64 *)*GWEN_IDLIST64_STEP);
352 idl->idTableCount=GWEN_IDLIST64_STEP;
354 idx=idl->lastTableIdx;
355 idt=idl->pIdTablePointers[idx];
370 if (idl->pIdTablePointers) {
371 GWEN_IDTABLE64 *idt=
NULL;
372 GWEN_IDTABLE64 **tablePtr;
375 for (idx=0, tablePtr=idl->pIdTablePointers; idx<idl->idTableCount; idx++, tablePtr++) {
393 if (idl->pIdTablePointers) {
394 GWEN_IDTABLE64 *idt=
NULL;
395 GWEN_IDTABLE64 **tablePtr;
398 for (idx=0, tablePtr=idl->pIdTablePointers; idx<idl->idTableCount; idx++, tablePtr++) {
412 GWEN_IDTABLE64 *idt=
NULL;
413 GWEN_IDTABLE64 **tablePtr;
416 for (idx=0, tablePtr=idl->pIdTablePointers; idx<idl->idTableCount; idx++, tablePtr++) {
429 if (idl->pIdTablePointers) {
430 GWEN_IDTABLE64 *idt=
NULL;
431 GWEN_IDTABLE64 **tablePtr;
434 for (idx=0, tablePtr=idl->pIdTablePointers; idx<idl->idTableCount; idx++, tablePtr++) {
441 free(idl->pIdTablePointers);
442 idl->pIdTablePointers=
NULL;
452 uint64_t a=*((
const uint64_t *)pa);
453 uint64_t b=*((
const uint64_t *)pb);
467 uint64_t a=*((
const uint64_t *)pa);
468 uint64_t b=*((
const uint64_t *)pb);
483 assert(idl->refCount);
484 if (idl->pIdTablePointers && idl->entryCount) {
496 ptr=(uint64_t *)malloc(
sizeof(uint64_t)*cnt);
500 for (i=0; i<cnt; i++) {
521 for (i=0; i<cnt; i++) {
552 nidl->idTableCount=idl->idTableCount;
553 nidl->entryCount=idl->entryCount;
554 if (idl->pIdTablePointers) {
555 for (idx=0; idx<idl->idTableCount; idx++) {
558 idt=idl->pIdTablePointers[idx];
560 GWEN_IDTABLE64 *nidt;
563 memmove(nidt->entries, idt->entries, GWEN_IDTABLE64_MAXENTRIES*
sizeof(uint64_t));
564 nidt->freeEntries=idt->freeEntries;
578 assert(idl->refCount);
580 return idl->entryCount;
587 GWEN_IDTABLE64 *idt=
NULL;
588 GWEN_IDTABLE64 **tablePtr;
593 for (idx=0, tablePtr=idl->pIdTablePointers; idx<idl->idTableCount; idx++, tablePtr++) {
599 for (i=0; i<GWEN_IDTABLE64_MAXENTRIES; i++) {
600 if (idt->entries[i]!=0) {
607 idIndex+=GWEN_IDTABLE64_MAXENTRIES;
619 uint64_t tableNum=*pos / GWEN_IDTABLE64_MAXENTRIES;
620 uint64_t tableIdx=*pos % GWEN_IDTABLE64_MAXENTRIES;
621 GWEN_IDTABLE64 **tablePtr;
625 if (tableNum>idl->idTableCount) {
631 idIndex=(tableNum*GWEN_IDTABLE64_MAXENTRIES);
632 for (idx=tableNum, tablePtr=idl->pIdTablePointers+tableNum; idx<idl->idTableCount; idx++, tablePtr++) {
639 for (i=tableIdx; i<GWEN_IDTABLE64_MAXENTRIES; i++) {
640 if (idt->entries[i]!=0) {
648 for (i=0; i<GWEN_IDTABLE64_MAXENTRIES; i++) {
649 if (idt->entries[i]!=0) {
657 idIndex+=GWEN_IDTABLE64_MAXENTRIES;
667 #ifndef NO_DEPRECATED_SYMBOLS 693 #endif // ifndef NO_DEPRECATED_SYMBOLS 741 GWEN_IDTABLE64 *idt=
NULL;
745 if (idl->pIdTablePointers==
NULL) {
747 idl->pIdTablePointers=(GWEN_IDTABLE64 **) malloc(
sizeof(GWEN_IDTABLE64 *)*GWEN_IDLIST64_STEP);
748 assert(idl->pIdTablePointers);
749 memset(idl->pIdTablePointers, 0,
sizeof(GWEN_IDTABLE64 *)*GWEN_IDLIST64_STEP);
750 idl->idTableCount=GWEN_IDLIST64_STEP;
753 assert(idl->lastTableIdx<idl->idTableCount);
754 idt=idl->pIdTablePointers[idl->lastTableIdx];
770 uint64_t tableNum=idx / GWEN_IDTABLE64_MAXENTRIES;
771 uint64_t tableIdx=idx % GWEN_IDTABLE64_MAXENTRIES;
774 if (tableNum>idl->idTableCount) {
779 idt=idl->pIdTablePointers[tableNum];
785 return idt->entries[tableIdx];
uint64_t GWEN_IdList64_GetFirstId2(const GWEN_IDLIST64 *idl, uint64_t *pos)
int GWEN_IdList64_HasId(const GWEN_IDLIST64 *idl, uint64_t id)
GWEN_IDLIST64_ITERATOR * GWEN_IdList64_Iterator_new(GWEN_IDLIST64 *idl)
#define GWEN_FREE_OBJECT(varname)
static int GWEN_IdTable64_DelId(GWEN_IDTABLE64 *idt, uint64_t id)
static int GWEN_IdTable64_HasId(const GWEN_IDTABLE64 *idt, uint64_t id)
int GWEN_IdList64_DelId(GWEN_IDLIST64 *idl, uint64_t id)
static int __compDescending(const void *pa, const void *pb)
int GWEN_IdList64_Sort(GWEN_IDLIST64 *idl)
void GWEN_IdList64_free(GWEN_IDLIST64 *idl)
void GWEN_IdList64_Iterator_free(GWEN_IDLIST64_ITERATOR *it)
static int GWEN_IdTable64_AddId(GWEN_IDTABLE64 *idt, uint64_t id)
uint64_t GWEN_IdList64_GetFirstId(GWEN_IDLIST64 *idl)
uint64_t GWEN_IdList64_GetEntryCount(const GWEN_IDLIST64 *idl)
static int GWEN_IdList64__Sort(GWEN_IDLIST64 *idl, int ascending)
uint64_t GWEN_IdList64__GetNextId(const GWEN_IDLIST64 *idl, uint64_t *pos)
#define GWEN_NEW_OBJECT(typ, varname)
GWEN_IDTABLE64 * GWEN_IdTable64_new(void)
static int GWEN_IdTable64_IsFull(const GWEN_IDTABLE64 *idt)
void GWEN_IdList64_AddTable(GWEN_IDLIST64 *idl, GWEN_IDTABLE64 *idt)
uint64_t GWEN_IdList64_Iterator_GetFirstId(GWEN_IDLIST64_ITERATOR *it)
uint64_t GWEN_IdList64_GetNextId(GWEN_IDLIST64 *idl)
int GWEN_IdList64_AddId(GWEN_IDLIST64 *idl, uint64_t id)
static int __compAscending(const void *pa, const void *pb)
int GWEN_IdList64_AppendId(GWEN_IDLIST64 *idl, uint64_t id)
#define DBG_ERROR(dbg_logger, format, args...)
GWEN_IDLIST64 * GWEN_IdList64_dup(const GWEN_IDLIST64 *idl)
void GWEN_IdList64_Clear(GWEN_IDLIST64 *idl)
#define DBG_INFO(dbg_logger, format, args...)
void GWEN_IdList64_Attach(GWEN_IDLIST64 *idl)
GWEN_IDLIST64 * GWEN_IdList64_new(void)
static int GWEN_IdTable64_IsEmpty(const GWEN_IDTABLE64 *idt)
void GWEN_IdList64_Clean(GWEN_IDLIST64 *idl)
uint64_t GWEN_IdList64_Iterator_GetNextId(GWEN_IDLIST64_ITERATOR *it)
static int GWEN_IdTable64_AppendId(GWEN_IDTABLE64 *idt, uint64_t id)
uint64_t GWEN_IdList64__GetFirstId(const GWEN_IDLIST64 *idl, uint64_t *pos)
void GWEN_IdTable64_free(GWEN_IDTABLE64 *idt)
uint64_t GWEN_IdList64_GetNextId2(const GWEN_IDLIST64 *idl, uint64_t *pos)
uint64_t GWEN_IdList64_GetIdAt(const GWEN_IDLIST64 *idl, uint64_t idx)
struct GWEN_IDLIST64_ITERATOR GWEN_IDLIST64_ITERATOR
struct GWEN_IDLIST64 GWEN_IDLIST64
int GWEN_IdList64_ReverseSort(GWEN_IDLIST64 *idl)