Lines Matching refs:set
23 * \brief Memory pool set class.
45 * \brief Declare a template pool set class interface.
46 * \param TYPENAME Type name of the declared set.
49 * This macro declares the interface for a set. For the implementation of
50 * the set, see DE_IMPLEMENT_POOL_HASH. Usually this macro is put into the
55 * The functions for operating the set are:
96 void TYPENAME##_reset (DE_PTR_TYPE(TYPENAME) set); \
97 deBool TYPENAME##_reserve (DE_PTR_TYPE(TYPENAME) set, int capacity); \
98 deBool TYPENAME##_exists (const TYPENAME* set, KEYTYPE key); \
99 deBool TYPENAME##_insert (DE_PTR_TYPE(TYPENAME) set, KEYTYPE key); \
100 void TYPENAME##_delete (DE_PTR_TYPE(TYPENAME) set, KEYTYPE key); \
102 DE_INLINE int TYPENAME##_getNumElements (const TYPENAME* set) DE_UNUSED_FUNCTION; \
107 DE_INLINE deBool TYPENAME##_safeInsert (DE_PTR_TYPE(TYPENAME) set, KEYTYPE key) DE_UNUSED_FUNCTION; \
108 DE_INLINE void TYPENAME##_safeDelete (DE_PTR_TYPE(TYPENAME) set, KEYTYPE key) DE_UNUSED_FUNCTION; \
110 DE_INLINE int TYPENAME##_getNumElements (const TYPENAME* set) \
112 return set->numElements; \
178 DE_INLINE deBool TYPENAME##_safeInsert (DE_PTR_TYPE(TYPENAME) set, KEYTYPE key) \
180 DE_ASSERT(set); \
181 if (TYPENAME##_exists(set, key)) \
183 return TYPENAME##_insert(set, key); \
186 DE_INLINE void TYPENAME##_safeDelete (DE_PTR_TYPE(TYPENAME) set, KEYTYPE key) \
188 DE_ASSERT(set); \
189 if (TYPENAME##_exists(set, key)) \
190 TYPENAME##_delete(set, key); \
196 * \brief Implement a template pool set class.
197 * \param TYPENAME Type name of the declared set.
202 * This macro has implements the set declared with DE_DECLARE_POOL_SET.
212 DE_PTR_TYPE(TYPENAME) set = DE_POOL_NEW(pool, TYPENAME); \
213 if (!set) \
217 memset(set, 0, sizeof(TYPENAME)); \
218 set->pool = pool; \
220 return set; \
223 void TYPENAME##_reset (DE_PTR_TYPE(TYPENAME) set) \
226 for (slotNdx = 0; slotNdx < set->slotTableSize; slotNdx++) \
228 TYPENAME##Slot* slot = set->slotTable[slotNdx]; \
232 slot->nextSlot = set->slotFreeList; \
233 set->slotFreeList = slot; \
237 set->slotTable[slotNdx] = DE_NULL; \
239 set->numElements = 0; \
242 TYPENAME##Slot* TYPENAME##_allocSlot (DE_PTR_TYPE(TYPENAME) set) \
245 if (set->slotFreeList) \
247 slot = set->slotFreeList; \
248 set->slotFreeList = set->slotFreeList->nextSlot; \
251 slot = (TYPENAME##Slot*)deMemPool_alloc(set->pool, sizeof(TYPENAME##Slot) * DE_SET_ELEMENTS_PER_SLOT); \
262 deBool TYPENAME##_rehash (DE_PTR_TYPE(TYPENAME) set, int newSlotTableSize) \
265 if (newSlotTableSize > set->slotTableSize) \
267 TYPENAME##Slot** oldSlotTable = set->slotTable; \
268 TYPENAME##Slot** newSlotTable = (TYPENAME##Slot**)deMemPool_alloc(set->pool, sizeof(TYPENAME##Slot*) * (size_t)newSlotTableSize); \
269 int oldSlotTableSize = set->slotTableSize; \
281 set->slotTableSize = newSlotTableSize; \
282 set->slotTable = newSlotTable; \
293 set->numElements--; \
294 if (!TYPENAME##_insert(set, slot->keys[elemNdx])) \
305 deBool TYPENAME##_exists (const TYPENAME* set, KEYTYPE key) \
307 if (set->numElements > 0) \
309 int slotNdx = (int)(HASHFUNC(key) & (deUint32)(set->slotTableSize - 1)); \
310 TYPENAME##Slot* slot = set->slotTable[slotNdx]; \
311 DE_ASSERT(deInBounds32(slotNdx, 0, set->slotTableSize)); \
328 deBool TYPENAME##_insert (DE_PTR_TYPE(TYPENAME) set, KEYTYPE key) \
333 DE_ASSERT(set); \
334 DE_ASSERT(!TYPENAME##_exists(set, key)); \
336 if ((set->numElements + 1) >= set->slotTableSize * DE_SET_ELEMENTS_PER_SLOT) \
337 if (!TYPENAME##_rehash(set, deMax32(4, 2*set->slotTableSize))) \
340 slotNdx = (int)(HASHFUNC(key) & (deUint32)(set->slotTableSize - 1)); \
341 DE_ASSERT(slotNdx >= 0 && slotNdx < set->slotTableSize); \
342 slot = set->slotTable[slotNdx]; \
346 slot = TYPENAME##_allocSlot(set); \
348 set->slotTable[slotNdx] = slot; \
359 TYPENAME##Slot* nextSlot = TYPENAME##_allocSlot(set); \
369 set->numElements++; \
375 void TYPENAME##_delete (DE_PTR_TYPE(TYPENAME) set, KEYTYPE key) \
381 DE_ASSERT(set->numElements > 0); \
382 slotNdx = (int)(HASHFUNC(key) & (deUint32)(set->slotTableSize - 1)); \
383 DE_ASSERT(slotNdx >= 0 && slotNdx < set->slotTableSize); \
384 slot = set->slotTable[slotNdx]; \
410 set->slotTable[slotNdx] = DE_NULL; \
412 lastSlot->nextSlot = set->slotFreeList; \
413 set->slotFreeList = lastSlot; \
416 set->numElements--; \
432 deBool SETTYPENAME##_copyToArray(const SETTYPENAME* set, DE_PTR_TYPE(ARRAYTYPENAME) array); \
436 deBool SETTYPENAME##_copyToArray(const SETTYPENAME* set, DE_PTR_TYPE(ARRAYTYPENAME) array) \
438 int numElements = set->numElements; \
445 for (slotNdx = 0; slotNdx < set->slotTableSize; slotNdx++) \
447 const SETTYPENAME##Slot* slot = set->slotTable[slotNdx]; \
462 * \brief Declare set-wise operations for a set template.
463 * \param TYPENAME Type name of the declared set.
466 * This macro declares union and intersection operations for a set.
471 * The functions for operating the set are: