void * FindNode( nodearray *list, unsigned index ) /*******************************************************/ { index--; // index is base 1 //#ifdef _INT_DEBUG if ( index > list->num ) { LnkMsg( ERR+MSG_INVALID_INDEX_IN_RELOC, "d", index+1 ); //printf("objnode.FindNode(): index %d exceeds max index %d\n", index+1, list->num ); return( NULL ); } //#endif return list->array[ARRAY_NUM(index)] + ELEMENT_NUM(index) * list->elsize; }
void IterateNodelist( nodearray *list, void (*fn)(void *, void *), void *cookie ) /***********************************************************************/ { int index; int limit; if( list->num == 0 ) return; limit = ARRAY_NUM( list->num ); for( index = 0; index < limit; index++ ) { IterateNodeArray( list->array[index], fn, list->elsize, NODE_ARRAY_SIZE, cookie ); } IterateNodeArray( list->array[limit], fn, list->elsize, ELEMENT_NUM(list->num), cookie ); }
static void * IterateFindValue( nodearray *list, void *target, bool (*fn)(void *, void *) ) /***************************************************************/ { unsigned index; void * retval; unsigned limit; if( list->num == 0 ) return NULL; limit = ARRAY_NUM( list->num ); for( index = 0; index < limit; index++ ) { retval = ListFindValue( list->array[index], NODE_ARRAY_SIZE, list->elsize, target, fn); if( retval ) return retval; } return ListFindValue( list->array[limit], ELEMENT_NUM(list->num), list->elsize, target, fn ); }
void * FindNode( nodearray *list, unsigned index ) /*******************************************************/ { index--; // index is base 1 return list->array[ARRAY_NUM(index)] + ELEMENT_NUM(index) * list->elsize; }