Lines Matching refs:ht

32 #define CONNECT_TO_GLOBAL_DLLIST(element, ht)				\  argument
33 (element)->pListLast = (ht)->pListTail; \
34 (ht)->pListTail = (element); \
39 if (!(ht)->pListHead) { \
40 (ht)->pListHead = (element); \
42 if ((ht)->pInternalPointer == NULL) { \
43 (ht)->pInternalPointer = (element); \
52 static void _zend_is_inconsistent(const HashTable *ht, const char *file, int line) in _zend_is_inconsistent() argument
54 if (ht->inconsistent==HT_OK) { in _zend_is_inconsistent()
57 switch (ht->inconsistent) { in _zend_is_inconsistent()
59 zend_output_debug_string(1, "%s(%d) : ht=%p is being destroyed", file, line, ht); in _zend_is_inconsistent()
62 zend_output_debug_string(1, "%s(%d) : ht=%p is already destroyed", file, line, ht); in _zend_is_inconsistent()
65 zend_output_debug_string(1, "%s(%d) : ht=%p is being cleaned", file, line, ht); in _zend_is_inconsistent()
68 zend_output_debug_string(1, "%s(%d) : ht=%p is inconsistent", file, line, ht); in _zend_is_inconsistent()
74 #define SET_INCONSISTENT(n) ht->inconsistent = n;
80 #define HASH_PROTECT_RECURSION(ht) \ argument
81 if ((ht)->bApplyProtection) { \
82 if ((ht)->nApplyCount++ >= 3) { \
88 #define HASH_UNPROTECT_RECURSION(ht) \ argument
89 if ((ht)->bApplyProtection) { \
90 (ht)->nApplyCount--; \
94 #define ZEND_HASH_IF_FULL_DO_RESIZE(ht) \ argument
95 if ((ht)->nNumOfElements > (ht)->nTableSize) { \
96 zend_hash_do_resize(ht); \
99 static int zend_hash_do_resize(HashTable *ht);
107 #define UPDATE_DATA(ht, p, pData, nDataSize) \ argument
110 pefree_rel((p)->pData, (ht)->persistent); \
116 (p)->pData = (void *) pemalloc_rel(nDataSize, (ht)->persistent); \
119 (p)->pData = (void *) perealloc_rel((p)->pData, nDataSize, (ht)->persistent); \
125 #define INIT_DATA(ht, p, pData, nDataSize); \ argument
130 (p)->pData = (void *) pemalloc_rel(nDataSize, (ht)->persistent);\
132 pefree_rel(p, (ht)->persistent); \
139 #define CHECK_INIT(ht) do { \ argument
140 if (UNEXPECTED((ht)->nTableMask == 0)) { \
141 (ht)->arBuckets = (Bucket **) pecalloc((ht)->nTableSize, sizeof(Bucket *), (ht)->persistent); \
142 (ht)->nTableMask = (ht)->nTableSize - 1; \
148 ZEND_API int _zend_hash_init(HashTable *ht, uint nSize, hash_func_t pHashFunction, dtor_func_t pDes… in _zend_hash_init() argument
156 ht->nTableSize = 0x80000000; in _zend_hash_init()
161 ht->nTableSize = 1 << i; in _zend_hash_init()
164 ht->nTableMask = 0; /* 0 means that ht->arBuckets is uninitialized */ in _zend_hash_init()
165 ht->pDestructor = pDestructor; in _zend_hash_init()
166 ht->arBuckets = (Bucket**)&uninitialized_bucket; in _zend_hash_init()
167 ht->pListHead = NULL; in _zend_hash_init()
168 ht->pListTail = NULL; in _zend_hash_init()
169 ht->nNumOfElements = 0; in _zend_hash_init()
170 ht->nNextFreeElement = 0; in _zend_hash_init()
171 ht->pInternalPointer = NULL; in _zend_hash_init()
172 ht->persistent = persistent; in _zend_hash_init()
173 ht->nApplyCount = 0; in _zend_hash_init()
174 ht->bApplyProtection = 1; in _zend_hash_init()
179 ZEND_API int _zend_hash_init_ex(HashTable *ht, uint nSize, hash_func_t pHashFunction, dtor_func_t p… in _zend_hash_init_ex() argument
181 int retval = _zend_hash_init(ht, nSize, pHashFunction, pDestructor, persistent ZEND_FILE_LINE_CC); in _zend_hash_init_ex()
183 ht->bApplyProtection = bApplyProtection; in _zend_hash_init_ex()
188 ZEND_API void zend_hash_set_apply_protection(HashTable *ht, zend_bool bApplyProtection) in zend_hash_set_apply_protection() argument
190 ht->bApplyProtection = bApplyProtection; in zend_hash_set_apply_protection()
195 ZEND_API int _zend_hash_add_or_update(HashTable *ht, const char *arKey, uint nKeyLength, void *pDat… in _zend_hash_add_or_update() argument
204 IS_CONSISTENT(ht); in _zend_hash_add_or_update()
213 CHECK_INIT(ht); in _zend_hash_add_or_update()
216 nIndex = h & ht->nTableMask; in _zend_hash_add_or_update()
218 p = ht->arBuckets[nIndex]; in _zend_hash_add_or_update()
233 if (ht->pDestructor) { in _zend_hash_add_or_update()
234 ht->pDestructor(p->pData); in _zend_hash_add_or_update()
236 UPDATE_DATA(ht, p, pData, nDataSize); in _zend_hash_add_or_update()
247 p = (Bucket *) pemalloc(sizeof(Bucket), ht->persistent); in _zend_hash_add_or_update()
253 p = (Bucket *) pemalloc(sizeof(Bucket) + nKeyLength, ht->persistent); in _zend_hash_add_or_update()
261 INIT_DATA(ht, p, pData, nDataSize); in _zend_hash_add_or_update()
263 CONNECT_TO_BUCKET_DLLIST(p, ht->arBuckets[nIndex]); in _zend_hash_add_or_update()
269 CONNECT_TO_GLOBAL_DLLIST(p, ht); in _zend_hash_add_or_update()
270 ht->arBuckets[nIndex] = p; in _zend_hash_add_or_update()
273 ht->nNumOfElements++; in _zend_hash_add_or_update()
274 ZEND_HASH_IF_FULL_DO_RESIZE(ht); /* If the Hash table is full, resize it */ in _zend_hash_add_or_update()
278 ZEND_API int _zend_hash_quick_add_or_update(HashTable *ht, const char *arKey, uint nKeyLength, ulon… in _zend_hash_quick_add_or_update() argument
286 IS_CONSISTENT(ht); in _zend_hash_quick_add_or_update()
289 return zend_hash_index_update(ht, h, pData, nDataSize, pDest); in _zend_hash_quick_add_or_update()
292 CHECK_INIT(ht); in _zend_hash_quick_add_or_update()
293 nIndex = h & ht->nTableMask; in _zend_hash_quick_add_or_update()
295 p = ht->arBuckets[nIndex]; in _zend_hash_quick_add_or_update()
310 if (ht->pDestructor) { in _zend_hash_quick_add_or_update()
311 ht->pDestructor(p->pData); in _zend_hash_quick_add_or_update()
313 UPDATE_DATA(ht, p, pData, nDataSize); in _zend_hash_quick_add_or_update()
324 p = (Bucket *) pemalloc(sizeof(Bucket), ht->persistent); in _zend_hash_quick_add_or_update()
330 p = (Bucket *) pemalloc(sizeof(Bucket) + nKeyLength, ht->persistent); in _zend_hash_quick_add_or_update()
339 INIT_DATA(ht, p, pData, nDataSize); in _zend_hash_quick_add_or_update()
342 CONNECT_TO_BUCKET_DLLIST(p, ht->arBuckets[nIndex]); in _zend_hash_quick_add_or_update()
349 ht->arBuckets[nIndex] = p; in _zend_hash_quick_add_or_update()
350 CONNECT_TO_GLOBAL_DLLIST(p, ht); in _zend_hash_quick_add_or_update()
353 ht->nNumOfElements++; in _zend_hash_quick_add_or_update()
354 ZEND_HASH_IF_FULL_DO_RESIZE(ht); /* If the Hash table is full, resize it */ in _zend_hash_quick_add_or_update()
359 ZEND_API int zend_hash_add_empty_element(HashTable *ht, const char *arKey, uint nKeyLength) in zend_hash_add_empty_element() argument
363 return zend_hash_add(ht, arKey, nKeyLength, &dummy, sizeof(void *), NULL); in zend_hash_add_empty_element()
367 ZEND_API int _zend_hash_index_update_or_next_insert(HashTable *ht, ulong h, void *pData, uint nData… in _zend_hash_index_update_or_next_insert() argument
375 IS_CONSISTENT(ht); in _zend_hash_index_update_or_next_insert()
376 CHECK_INIT(ht); in _zend_hash_index_update_or_next_insert()
379 h = ht->nNextFreeElement; in _zend_hash_index_update_or_next_insert()
381 nIndex = h & ht->nTableMask; in _zend_hash_index_update_or_next_insert()
383 p = ht->arBuckets[nIndex]; in _zend_hash_index_update_or_next_insert()
397 if (ht->pDestructor) { in _zend_hash_index_update_or_next_insert()
398 ht->pDestructor(p->pData); in _zend_hash_index_update_or_next_insert()
400 UPDATE_DATA(ht, p, pData, nDataSize); in _zend_hash_index_update_or_next_insert()
402 if ((long)h >= (long)ht->nNextFreeElement) { in _zend_hash_index_update_or_next_insert()
403 ht->nNextFreeElement = h < LONG_MAX ? h + 1 : LONG_MAX; in _zend_hash_index_update_or_next_insert()
412 p = (Bucket *) pemalloc_rel(sizeof(Bucket), ht->persistent); in _zend_hash_index_update_or_next_insert()
419 INIT_DATA(ht, p, pData, nDataSize); in _zend_hash_index_update_or_next_insert()
424 CONNECT_TO_BUCKET_DLLIST(p, ht->arBuckets[nIndex]); in _zend_hash_index_update_or_next_insert()
427 ht->arBuckets[nIndex] = p; in _zend_hash_index_update_or_next_insert()
428 CONNECT_TO_GLOBAL_DLLIST(p, ht); in _zend_hash_index_update_or_next_insert()
431 if ((long)h >= (long)ht->nNextFreeElement) { in _zend_hash_index_update_or_next_insert()
432 ht->nNextFreeElement = h < LONG_MAX ? h + 1 : LONG_MAX; in _zend_hash_index_update_or_next_insert()
434 ht->nNumOfElements++; in _zend_hash_index_update_or_next_insert()
435 ZEND_HASH_IF_FULL_DO_RESIZE(ht); in _zend_hash_index_update_or_next_insert()
440 static int zend_hash_do_resize(HashTable *ht) in zend_hash_do_resize() argument
447 IS_CONSISTENT(ht); in zend_hash_do_resize()
449 if ((ht->nTableSize << 1) > 0) { /* Let's double the table size */ in zend_hash_do_resize()
450 …t = (Bucket **) perealloc_recoverable(ht->arBuckets, (ht->nTableSize << 1) * sizeof(Bucket *), ht-… in zend_hash_do_resize()
453 ht->arBuckets = t; in zend_hash_do_resize()
454 ht->nTableSize = (ht->nTableSize << 1); in zend_hash_do_resize()
455 ht->nTableMask = ht->nTableSize - 1; in zend_hash_do_resize()
456 zend_hash_rehash(ht); in zend_hash_do_resize()
465 ZEND_API int zend_hash_rehash(HashTable *ht) in zend_hash_rehash() argument
470 IS_CONSISTENT(ht); in zend_hash_rehash()
471 if (UNEXPECTED(ht->nNumOfElements == 0)) { in zend_hash_rehash()
475 memset(ht->arBuckets, 0, ht->nTableSize * sizeof(Bucket *)); in zend_hash_rehash()
476 p = ht->pListHead; in zend_hash_rehash()
478 nIndex = p->h & ht->nTableMask; in zend_hash_rehash()
479 CONNECT_TO_BUCKET_DLLIST(p, ht->arBuckets[nIndex]); in zend_hash_rehash()
480 ht->arBuckets[nIndex] = p; in zend_hash_rehash()
486 ZEND_API int zend_hash_del_key_or_index(HashTable *ht, const char *arKey, uint nKeyLength, ulong h,… in zend_hash_del_key_or_index() argument
494 IS_CONSISTENT(ht); in zend_hash_del_key_or_index()
499 nIndex = h & ht->nTableMask; in zend_hash_del_key_or_index()
501 p = ht->arBuckets[nIndex]; in zend_hash_del_key_or_index()
508 if (p == ht->arBuckets[nIndex]) { in zend_hash_del_key_or_index()
509 ht->arBuckets[nIndex] = p->pNext; in zend_hash_del_key_or_index()
520 ht->pListHead = p->pListNext; in zend_hash_del_key_or_index()
525 ht->pListTail = p->pListLast; in zend_hash_del_key_or_index()
527 if (ht->pInternalPointer == p) { in zend_hash_del_key_or_index()
528 ht->pInternalPointer = p->pListNext; in zend_hash_del_key_or_index()
530 ht->nNumOfElements--; in zend_hash_del_key_or_index()
531 if (ht->pDestructor) { in zend_hash_del_key_or_index()
532 ht->pDestructor(p->pData); in zend_hash_del_key_or_index()
535 pefree(p->pData, ht->persistent); in zend_hash_del_key_or_index()
537 pefree(p, ht->persistent); in zend_hash_del_key_or_index()
547 ZEND_API void zend_hash_destroy(HashTable *ht) in zend_hash_destroy() argument
551 IS_CONSISTENT(ht); in zend_hash_destroy()
555 p = ht->pListHead; in zend_hash_destroy()
559 if (ht->pDestructor) { in zend_hash_destroy()
560 ht->pDestructor(q->pData); in zend_hash_destroy()
563 pefree(q->pData, ht->persistent); in zend_hash_destroy()
565 pefree(q, ht->persistent); in zend_hash_destroy()
567 if (ht->nTableMask) { in zend_hash_destroy()
568 pefree(ht->arBuckets, ht->persistent); in zend_hash_destroy()
575 ZEND_API void zend_hash_clean(HashTable *ht) in zend_hash_clean() argument
579 IS_CONSISTENT(ht); in zend_hash_clean()
581 p = ht->pListHead; in zend_hash_clean()
583 if (ht->nTableMask) { in zend_hash_clean()
584 memset(ht->arBuckets, 0, ht->nTableSize*sizeof(Bucket *)); in zend_hash_clean()
586 ht->pListHead = NULL; in zend_hash_clean()
587 ht->pListTail = NULL; in zend_hash_clean()
588 ht->nNumOfElements = 0; in zend_hash_clean()
589 ht->nNextFreeElement = 0; in zend_hash_clean()
590 ht->pInternalPointer = NULL; in zend_hash_clean()
595 if (ht->pDestructor) { in zend_hash_clean()
596 ht->pDestructor(q->pData); in zend_hash_clean()
599 pefree(q->pData, ht->persistent); in zend_hash_clean()
601 pefree(q, ht->persistent); in zend_hash_clean()
610 static Bucket *zend_hash_apply_deleter(HashTable *ht, Bucket *p) in zend_hash_apply_deleter() argument
623 nIndex = p->h & ht->nTableMask; in zend_hash_apply_deleter()
624 ht->arBuckets[nIndex] = p->pNext; in zend_hash_apply_deleter()
636 ht->pListHead = p->pListNext; in zend_hash_apply_deleter()
641 ht->pListTail = p->pListLast; in zend_hash_apply_deleter()
643 if (ht->pInternalPointer == p) { in zend_hash_apply_deleter()
644 ht->pInternalPointer = p->pListNext; in zend_hash_apply_deleter()
646 ht->nNumOfElements--; in zend_hash_apply_deleter()
649 if (ht->pDestructor) { in zend_hash_apply_deleter()
650 ht->pDestructor(p->pData); in zend_hash_apply_deleter()
653 pefree(p->pData, ht->persistent); in zend_hash_apply_deleter()
656 pefree(p, ht->persistent); in zend_hash_apply_deleter()
662 ZEND_API void zend_hash_graceful_destroy(HashTable *ht) in zend_hash_graceful_destroy() argument
666 IS_CONSISTENT(ht); in zend_hash_graceful_destroy()
668 p = ht->pListHead; in zend_hash_graceful_destroy()
670 p = zend_hash_apply_deleter(ht, p); in zend_hash_graceful_destroy()
672 if (ht->nTableMask) { in zend_hash_graceful_destroy()
673 pefree(ht->arBuckets, ht->persistent); in zend_hash_graceful_destroy()
679 ZEND_API void zend_hash_graceful_reverse_destroy(HashTable *ht) in zend_hash_graceful_reverse_destroy() argument
683 IS_CONSISTENT(ht); in zend_hash_graceful_reverse_destroy()
685 p = ht->pListTail; in zend_hash_graceful_reverse_destroy()
687 zend_hash_apply_deleter(ht, p); in zend_hash_graceful_reverse_destroy()
688 p = ht->pListTail; in zend_hash_graceful_reverse_destroy()
691 if (ht->nTableMask) { in zend_hash_graceful_reverse_destroy()
692 pefree(ht->arBuckets, ht->persistent); in zend_hash_graceful_reverse_destroy()
707 ZEND_API void zend_hash_apply(HashTable *ht, apply_func_t apply_func TSRMLS_DC) in zend_hash_apply() argument
711 IS_CONSISTENT(ht); in zend_hash_apply()
713 HASH_PROTECT_RECURSION(ht); in zend_hash_apply()
714 p = ht->pListHead; in zend_hash_apply()
719 p = zend_hash_apply_deleter(ht, p); in zend_hash_apply()
727 HASH_UNPROTECT_RECURSION(ht); in zend_hash_apply()
731 ZEND_API void zend_hash_apply_with_argument(HashTable *ht, apply_func_arg_t apply_func, void *argum… in zend_hash_apply_with_argument() argument
735 IS_CONSISTENT(ht); in zend_hash_apply_with_argument()
737 HASH_PROTECT_RECURSION(ht); in zend_hash_apply_with_argument()
738 p = ht->pListHead; in zend_hash_apply_with_argument()
743 p = zend_hash_apply_deleter(ht, p); in zend_hash_apply_with_argument()
751 HASH_UNPROTECT_RECURSION(ht); in zend_hash_apply_with_argument()
755 ZEND_API void zend_hash_apply_with_arguments(HashTable *ht TSRMLS_DC, apply_func_args_t apply_func,… in zend_hash_apply_with_arguments()
761 IS_CONSISTENT(ht); in zend_hash_apply_with_arguments()
763 HASH_PROTECT_RECURSION(ht); in zend_hash_apply_with_arguments()
765 p = ht->pListHead; in zend_hash_apply_with_arguments()
775 p = zend_hash_apply_deleter(ht, p); in zend_hash_apply_with_arguments()
786 HASH_UNPROTECT_RECURSION(ht); in zend_hash_apply_with_arguments()
790 ZEND_API void zend_hash_reverse_apply(HashTable *ht, apply_func_t apply_func TSRMLS_DC) in zend_hash_reverse_apply() argument
794 IS_CONSISTENT(ht); in zend_hash_reverse_apply()
796 HASH_PROTECT_RECURSION(ht); in zend_hash_reverse_apply()
797 p = ht->pListTail; in zend_hash_reverse_apply()
804 zend_hash_apply_deleter(ht, q); in zend_hash_reverse_apply()
810 HASH_UNPROTECT_RECURSION(ht); in zend_hash_reverse_apply()
913 ZEND_API int zend_hash_find(const HashTable *ht, const char *arKey, uint nKeyLength, void **pData) in zend_hash_find() argument
919 IS_CONSISTENT(ht); in zend_hash_find()
922 nIndex = h & ht->nTableMask; in zend_hash_find()
924 p = ht->arBuckets[nIndex]; in zend_hash_find()
937 ZEND_API int zend_hash_quick_find(const HashTable *ht, const char *arKey, uint nKeyLength, ulong h,… in zend_hash_quick_find() argument
943 return zend_hash_index_find(ht, h, pData); in zend_hash_quick_find()
946 IS_CONSISTENT(ht); in zend_hash_quick_find()
948 nIndex = h & ht->nTableMask; in zend_hash_quick_find()
950 p = ht->arBuckets[nIndex]; in zend_hash_quick_find()
963 ZEND_API int zend_hash_exists(const HashTable *ht, const char *arKey, uint nKeyLength) in zend_hash_exists() argument
969 IS_CONSISTENT(ht); in zend_hash_exists()
972 nIndex = h & ht->nTableMask; in zend_hash_exists()
974 p = ht->arBuckets[nIndex]; in zend_hash_exists()
986 ZEND_API int zend_hash_quick_exists(const HashTable *ht, const char *arKey, uint nKeyLength, ulong … in zend_hash_quick_exists() argument
992 return zend_hash_index_exists(ht, h); in zend_hash_quick_exists()
995 IS_CONSISTENT(ht); in zend_hash_quick_exists()
997 nIndex = h & ht->nTableMask; in zend_hash_quick_exists()
999 p = ht->arBuckets[nIndex]; in zend_hash_quick_exists()
1012 ZEND_API int zend_hash_index_find(const HashTable *ht, ulong h, void **pData) in zend_hash_index_find() argument
1017 IS_CONSISTENT(ht); in zend_hash_index_find()
1019 nIndex = h & ht->nTableMask; in zend_hash_index_find()
1021 p = ht->arBuckets[nIndex]; in zend_hash_index_find()
1033 ZEND_API int zend_hash_index_exists(const HashTable *ht, ulong h) in zend_hash_index_exists() argument
1038 IS_CONSISTENT(ht); in zend_hash_index_exists()
1040 nIndex = h & ht->nTableMask; in zend_hash_index_exists()
1042 p = ht->arBuckets[nIndex]; in zend_hash_index_exists()
1053 ZEND_API int zend_hash_num_elements(const HashTable *ht) in zend_hash_num_elements() argument
1055 IS_CONSISTENT(ht); in zend_hash_num_elements()
1057 return ht->nNumOfElements; in zend_hash_num_elements()
1061 ZEND_API int zend_hash_get_pointer(const HashTable *ht, HashPointer *ptr) in zend_hash_get_pointer() argument
1063 ptr->pos = ht->pInternalPointer; in zend_hash_get_pointer()
1064 if (ht->pInternalPointer) { in zend_hash_get_pointer()
1065 ptr->h = ht->pInternalPointer->h; in zend_hash_get_pointer()
1073 ZEND_API int zend_hash_set_pointer(HashTable *ht, const HashPointer *ptr) in zend_hash_set_pointer() argument
1076 ht->pInternalPointer = NULL; in zend_hash_set_pointer()
1077 } else if (ht->pInternalPointer != ptr->pos) { in zend_hash_set_pointer()
1080 IS_CONSISTENT(ht); in zend_hash_set_pointer()
1081 p = ht->arBuckets[ptr->h & ht->nTableMask]; in zend_hash_set_pointer()
1084 ht->pInternalPointer = p; in zend_hash_set_pointer()
1094 ZEND_API void zend_hash_internal_pointer_reset_ex(HashTable *ht, HashPosition *pos) in zend_hash_internal_pointer_reset_ex() argument
1096 IS_CONSISTENT(ht); in zend_hash_internal_pointer_reset_ex()
1099 *pos = ht->pListHead; in zend_hash_internal_pointer_reset_ex()
1101 ht->pInternalPointer = ht->pListHead; in zend_hash_internal_pointer_reset_ex()
1108 ZEND_API void zend_hash_internal_pointer_end_ex(HashTable *ht, HashPosition *pos) in zend_hash_internal_pointer_end_ex() argument
1110 IS_CONSISTENT(ht); in zend_hash_internal_pointer_end_ex()
1113 *pos = ht->pListTail; in zend_hash_internal_pointer_end_ex()
1115 ht->pInternalPointer = ht->pListTail; in zend_hash_internal_pointer_end_ex()
1119 ZEND_API int zend_hash_move_forward_ex(HashTable *ht, HashPosition *pos) in zend_hash_move_forward_ex() argument
1121 HashPosition *current = pos ? pos : &ht->pInternalPointer; in zend_hash_move_forward_ex()
1123 IS_CONSISTENT(ht); in zend_hash_move_forward_ex()
1132 ZEND_API int zend_hash_move_backwards_ex(HashTable *ht, HashPosition *pos) in zend_hash_move_backwards_ex() argument
1134 HashPosition *current = pos ? pos : &ht->pInternalPointer; in zend_hash_move_backwards_ex()
1136 IS_CONSISTENT(ht); in zend_hash_move_backwards_ex()
1147 ZEND_API int zend_hash_get_current_key_ex(const HashTable *ht, char **str_index, uint *str_length, … in zend_hash_get_current_key_ex() argument
1151 p = pos ? (*pos) : ht->pInternalPointer; in zend_hash_get_current_key_ex()
1153 IS_CONSISTENT(ht); in zend_hash_get_current_key_ex()
1174 ZEND_API void zend_hash_get_current_key_zval_ex(const HashTable *ht, zval *key, HashPosition *pos) { in zend_hash_get_current_key_zval_ex() argument
1177 IS_CONSISTENT(ht); in zend_hash_get_current_key_zval_ex()
1179 p = pos ? (*pos) : ht->pInternalPointer; in zend_hash_get_current_key_zval_ex()
1193 ZEND_API int zend_hash_get_current_key_type_ex(HashTable *ht, HashPosition *pos) in zend_hash_get_current_key_type_ex() argument
1197 p = pos ? (*pos) : ht->pInternalPointer; in zend_hash_get_current_key_type_ex()
1199 IS_CONSISTENT(ht); in zend_hash_get_current_key_type_ex()
1212 ZEND_API int zend_hash_get_current_data_ex(HashTable *ht, void **pData, HashPosition *pos) in zend_hash_get_current_data_ex() argument
1216 p = pos ? (*pos) : ht->pInternalPointer; in zend_hash_get_current_data_ex()
1218 IS_CONSISTENT(ht); in zend_hash_get_current_data_ex()
1231 ZEND_API int zend_hash_update_current_key_ex(HashTable *ht, int key_type, const char *str_index, ui… in zend_hash_update_current_key_ex() argument
1239 p = pos ? (*pos) : ht->pInternalPointer; in zend_hash_update_current_key_ex()
1241 IS_CONSISTENT(ht); in zend_hash_update_current_key_ex()
1250 q = ht->arBuckets[num_index & ht->nTableMask]; in zend_hash_update_current_key_ex()
1271 q = ht->arBuckets[h & ht->nTableMask]; in zend_hash_update_current_key_ex()
1301 if (p == ht->arBuckets[p->h & ht->nTableMask]) { in zend_hash_update_current_key_ex()
1302 ht->arBuckets[p->h & ht->nTableMask] = p->pNext; in zend_hash_update_current_key_ex()
1313 ht->pListHead = p->pListNext; in zend_hash_update_current_key_ex()
1318 ht->pListTail = p->pListLast; in zend_hash_update_current_key_ex()
1320 if (ht->pInternalPointer == p) { in zend_hash_update_current_key_ex()
1321 ht->pInternalPointer = p->pListNext; in zend_hash_update_current_key_ex()
1323 ht->nNumOfElements--; in zend_hash_update_current_key_ex()
1324 if (ht->pDestructor) { in zend_hash_update_current_key_ex()
1325 ht->pDestructor(p->pData); in zend_hash_update_current_key_ex()
1328 pefree(p->pData, ht->persistent); in zend_hash_update_current_key_ex()
1330 pefree(p, ht->persistent); in zend_hash_update_current_key_ex()
1336 if (q == ht->arBuckets[q->h & ht->nTableMask]) { in zend_hash_update_current_key_ex()
1337 ht->arBuckets[q->h & ht->nTableMask] = q->pNext; in zend_hash_update_current_key_ex()
1348 ht->pListHead = q->pListNext; in zend_hash_update_current_key_ex()
1353 ht->pListTail = q->pListLast; in zend_hash_update_current_key_ex()
1355 if (ht->pInternalPointer == q) { in zend_hash_update_current_key_ex()
1356 ht->pInternalPointer = q->pListNext; in zend_hash_update_current_key_ex()
1358 ht->nNumOfElements--; in zend_hash_update_current_key_ex()
1359 if (ht->pDestructor) { in zend_hash_update_current_key_ex()
1360 ht->pDestructor(q->pData); in zend_hash_update_current_key_ex()
1363 pefree(q->pData, ht->persistent); in zend_hash_update_current_key_ex()
1365 pefree(q, ht->persistent); in zend_hash_update_current_key_ex()
1374 ht->arBuckets[p->h & ht->nTableMask] = p->pNext; in zend_hash_update_current_key_ex()
1382 q = (Bucket *) pemalloc(sizeof(Bucket), ht->persistent); in zend_hash_update_current_key_ex()
1384 q = (Bucket *) pemalloc(sizeof(Bucket) + str_length, ht->persistent); in zend_hash_update_current_key_ex()
1399 ht->pListTail = q; in zend_hash_update_current_key_ex()
1404 ht->pListHead = q; in zend_hash_update_current_key_ex()
1406 if (ht->pInternalPointer == p) { in zend_hash_update_current_key_ex()
1407 ht->pInternalPointer = q; in zend_hash_update_current_key_ex()
1412 pefree(p, ht->persistent); in zend_hash_update_current_key_ex()
1418 if ((long)num_index >= (long)ht->nNextFreeElement) { in zend_hash_update_current_key_ex()
1419 ht->nNextFreeElement = num_index < LONG_MAX ? num_index + 1 : LONG_MAX; in zend_hash_update_current_key_ex()
1432 CONNECT_TO_BUCKET_DLLIST(p, ht->arBuckets[p->h & ht->nTableMask]); in zend_hash_update_current_key_ex()
1433 ht->arBuckets[p->h & ht->nTableMask] = p; in zend_hash_update_current_key_ex()
1442 ZEND_API int zend_hash_sort(HashTable *ht, sort_func_t sort_func, in zend_hash_sort() argument
1449 IS_CONSISTENT(ht); in zend_hash_sort()
1451 if (!(ht->nNumOfElements>1) && !(renumber && ht->nNumOfElements>0)) { /* Doesn't require sorting */ in zend_hash_sort()
1454 arTmp = (Bucket **) pemalloc(ht->nNumOfElements * sizeof(Bucket *), ht->persistent); in zend_hash_sort()
1458 p = ht->pListHead; in zend_hash_sort()
1469 ht->pListHead = arTmp[0]; in zend_hash_sort()
1470 ht->pListTail = NULL; in zend_hash_sort()
1471 ht->pInternalPointer = ht->pListHead; in zend_hash_sort()
1485 ht->pListTail = arTmp[i-1]; in zend_hash_sort()
1487 pefree(arTmp, ht->persistent); in zend_hash_sort()
1491 p = ht->pListHead; in zend_hash_sort()
1498 ht->nNextFreeElement = i; in zend_hash_sort()
1499 zend_hash_rehash(ht); in zend_hash_sort()
1590 ZEND_API int zend_hash_minmax(const HashTable *ht, compare_func_t compar, int flag, void **pData TS… in zend_hash_minmax() argument
1594 IS_CONSISTENT(ht); in zend_hash_minmax()
1596 if (ht->nNumOfElements == 0 ) { in zend_hash_minmax()
1601 res = p = ht->pListHead; in zend_hash_minmax()
1617 ZEND_API ulong zend_hash_next_free_element(const HashTable *ht) in zend_hash_next_free_element() argument
1619 IS_CONSISTENT(ht); in zend_hash_next_free_element()
1621 return ht->nNextFreeElement; in zend_hash_next_free_element()
1627 void zend_hash_display_pListTail(const HashTable *ht) in zend_hash_display_pListTail() argument
1631 p = ht->pListTail; in zend_hash_display_pListTail()
1638 void zend_hash_display(const HashTable *ht) in zend_hash_display() argument
1643 if (UNEXPECTED(ht->nNumOfElements == 0)) { in zend_hash_display()
1647 for (i = 0; i < ht->nTableSize; i++) { in zend_hash_display()
1648 p = ht->arBuckets[i]; in zend_hash_display()
1655 p = ht->pListTail; in zend_hash_display()