Lines Matching refs:heap

73 	spl_ptr_heap       *heap;  member
226 spl_ptr_heap *heap = emalloc(sizeof(spl_ptr_heap)); in spl_ptr_heap_init() local
228 heap->dtor = dtor; in spl_ptr_heap_init()
229 heap->ctor = ctor; in spl_ptr_heap_init()
230 heap->cmp = cmp; in spl_ptr_heap_init()
231 heap->elements = safe_emalloc(sizeof(spl_ptr_heap_element), PTR_HEAP_BLOCK_SIZE, 0); in spl_ptr_heap_init()
232 heap->max_size = PTR_HEAP_BLOCK_SIZE; in spl_ptr_heap_init()
233 heap->count = 0; in spl_ptr_heap_init()
234 heap->flags = 0; in spl_ptr_heap_init()
236 return heap; in spl_ptr_heap_init()
240 static void spl_ptr_heap_insert(spl_ptr_heap *heap, spl_ptr_heap_element elem, void *cmp_userdata T… in spl_ptr_heap_insert() argument
243 if (heap->count+1 > heap->max_size) { in spl_ptr_heap_insert()
245heap->elements = (void **) safe_erealloc(heap->elements, sizeof(spl_ptr_heap_element), (heap->max… in spl_ptr_heap_insert()
246 heap->max_size *= 2; in spl_ptr_heap_insert()
249 heap->ctor(elem TSRMLS_CC); in spl_ptr_heap_insert()
252 …for(i = heap->count++; i > 0 && heap->cmp(heap->elements[(i-1)/2], elem, cmp_userdata TSRMLS_CC) <… in spl_ptr_heap_insert()
253 heap->elements[i] = heap->elements[(i-1)/2]; in spl_ptr_heap_insert()
258 heap->flags |= SPL_HEAP_CORRUPTED; in spl_ptr_heap_insert()
261 heap->elements[i] = elem; in spl_ptr_heap_insert()
266 static spl_ptr_heap_element spl_ptr_heap_top(spl_ptr_heap *heap) { /* {{{ */ in spl_ptr_heap_top() argument
267 if (heap->count == 0) { in spl_ptr_heap_top()
271 return heap->elements[0]; in spl_ptr_heap_top()
275 static spl_ptr_heap_element spl_ptr_heap_delete_top(spl_ptr_heap *heap, void *cmp_userdata TSRMLS_D… in spl_ptr_heap_delete_top() argument
277 const int limit = (heap->count-1)/2; in spl_ptr_heap_delete_top()
281 if (heap->count == 0) { in spl_ptr_heap_delete_top()
285 top = heap->elements[0]; in spl_ptr_heap_delete_top()
286 bottom = heap->elements[--heap->count]; in spl_ptr_heap_delete_top()
292 …if(j != heap->count && heap->cmp(heap->elements[j+1], heap->elements[j], cmp_userdata TSRMLS_CC) >… in spl_ptr_heap_delete_top()
297 if(heap->cmp(bottom, heap->elements[j], cmp_userdata TSRMLS_CC) < 0) { in spl_ptr_heap_delete_top()
298 heap->elements[i] = heap->elements[j]; in spl_ptr_heap_delete_top()
306 heap->flags |= SPL_HEAP_CORRUPTED; in spl_ptr_heap_delete_top()
309 heap->elements[i] = bottom; in spl_ptr_heap_delete_top()
310 heap->dtor(top TSRMLS_CC); in spl_ptr_heap_delete_top()
318 spl_ptr_heap *heap = emalloc(sizeof(spl_ptr_heap)); in spl_ptr_heap_clone() local
320 heap->dtor = from->dtor; in spl_ptr_heap_clone()
321 heap->ctor = from->ctor; in spl_ptr_heap_clone()
322 heap->cmp = from->cmp; in spl_ptr_heap_clone()
323 heap->max_size = from->max_size; in spl_ptr_heap_clone()
324 heap->count = from->count; in spl_ptr_heap_clone()
325 heap->flags = from->flags; in spl_ptr_heap_clone()
327 heap->elements = safe_emalloc(sizeof(spl_ptr_heap_element),from->max_size,0); in spl_ptr_heap_clone()
328 memcpy(heap->elements, from->elements, sizeof(spl_ptr_heap_element)*from->max_size); in spl_ptr_heap_clone()
330 for (i=0; i < heap->count; ++i) { in spl_ptr_heap_clone()
331 heap->ctor(heap->elements[i] TSRMLS_CC); in spl_ptr_heap_clone()
334 return heap; in spl_ptr_heap_clone()
338 static void spl_ptr_heap_destroy(spl_ptr_heap *heap TSRMLS_DC) { /* {{{ */ in spl_ptr_heap_destroy()
341 for (i=0; i < heap->count; ++i) { in spl_ptr_heap_destroy()
342 heap->dtor(heap->elements[i] TSRMLS_CC); in spl_ptr_heap_destroy()
345 efree(heap->elements); in spl_ptr_heap_destroy()
346 efree(heap); in spl_ptr_heap_destroy()
350 static int spl_ptr_heap_count(spl_ptr_heap *heap) { /* {{{ */ in spl_ptr_heap_count() argument
351 return heap->count; in spl_ptr_heap_count()
365 for (i = 0; i < intern->heap->count; ++i) { in spl_heap_object_free_storage()
366 if (intern->heap->elements[i]) { in spl_heap_object_free_storage()
367 zval_ptr_dtor((zval **)&intern->heap->elements[i]); in spl_heap_object_free_storage()
371 spl_ptr_heap_destroy(intern->heap TSRMLS_CC); in spl_heap_object_free_storage()
408 intern->heap = spl_ptr_heap_clone(other->heap TSRMLS_CC); in spl_heap_object_new_ex()
409 for (i = 0; i < intern->heap->count; ++i) { in spl_heap_object_new_ex()
410 if (intern->heap->elements[i]) { in spl_heap_object_new_ex()
411 Z_ADDREF_P((zval *)intern->heap->elements[i]); in spl_heap_object_new_ex()
415 intern->heap = other->heap; in spl_heap_object_new_ex()
420 …intern->heap = spl_ptr_heap_init(spl_ptr_heap_zval_max_cmp, spl_ptr_heap_zval_ctor, spl_ptr_heap_z… in spl_heap_object_new_ex()
427 intern->heap->cmp = spl_ptr_pqueue_zval_cmp; in spl_heap_object_new_ex()
434 intern->heap->cmp = spl_ptr_heap_zval_min_cmp; in spl_heap_object_new_ex()
439 intern->heap->cmp = spl_ptr_heap_zval_max_cmp; in spl_heap_object_new_ex()
516 *count = spl_ptr_heap_count(intern->heap); in spl_heap_object_count_elements()
551 add_assoc_bool_ex(&zrv, pnstr, pnlen+1, intern->heap->flags&SPL_HEAP_CORRUPTED); in spl_heap_object_get_debug_info_helper()
557 for (i = 0; i < intern->heap->count; ++i) { in spl_heap_object_get_debug_info_helper()
558 add_index_zval(heap_array, i, (zval *)intern->heap->elements[i]); in spl_heap_object_get_debug_info_helper()
559 Z_ADDREF_P(intern->heap->elements[i]); in spl_heap_object_get_debug_info_helper()
594 count = spl_ptr_heap_count(intern->heap); in SPL_METHOD()
609 RETURN_BOOL(spl_ptr_heap_count(intern->heap)==0); in SPL_METHOD()
626 if (intern->heap->flags & SPL_HEAP_CORRUPTED) { in SPL_METHOD()
633 spl_ptr_heap_insert(intern->heap, value, getThis() TSRMLS_CC); in SPL_METHOD()
652 if (intern->heap->flags & SPL_HEAP_CORRUPTED) { in SPL_METHOD()
657 value = (zval *)spl_ptr_heap_delete_top(intern->heap, getThis() TSRMLS_CC); in SPL_METHOD()
681 if (intern->heap->flags & SPL_HEAP_CORRUPTED) { in SPL_METHOD()
695 spl_ptr_heap_insert(intern->heap, elem, getThis() TSRMLS_CC); in SPL_METHOD()
714 if (intern->heap->flags & SPL_HEAP_CORRUPTED) { in SPL_METHOD()
719 value = (zval *)spl_ptr_heap_delete_top(intern->heap, getThis() TSRMLS_CC); in SPL_METHOD()
757 if (intern->heap->flags & SPL_HEAP_CORRUPTED) { in SPL_METHOD()
762 value = (zval *)spl_ptr_heap_top(intern->heap); in SPL_METHOD()
811 intern->heap->flags = intern->heap->flags & ~SPL_HEAP_CORRUPTED; in SPL_METHOD()
844 if (intern->heap->flags & SPL_HEAP_CORRUPTED) { in SPL_METHOD()
849 value = (zval *)spl_ptr_heap_top(intern->heap); in SPL_METHOD()
909 return (iterator->object->heap->count != 0 ? SUCCESS : FAILURE); in spl_heap_it_valid()
916 zval **element = (zval **)&iterator->object->heap->elements[0]; in spl_heap_it_get_current_data()
918 if (iterator->object->heap->flags & SPL_HEAP_CORRUPTED) { in spl_heap_it_get_current_data()
923 if (iterator->object->heap->count == 0 || !*element) { in spl_heap_it_get_current_data()
934 zval **element = (zval **)&iterator->object->heap->elements[0]; in spl_pqueue_it_get_current_data()
936 if (iterator->object->heap->flags & SPL_HEAP_CORRUPTED) { in spl_pqueue_it_get_current_data()
941 if (iterator->object->heap->count == 0 || !*element) { in spl_pqueue_it_get_current_data()
956 *int_key = (ulong) iterator->object->heap->count - 1; in spl_heap_it_get_current_key()
967 if (iterator->object->heap->flags & SPL_HEAP_CORRUPTED) { in spl_heap_it_move_forward()
972 elem = spl_ptr_heap_delete_top(iterator->object->heap, object TSRMLS_CC); in spl_heap_it_move_forward()
992 RETURN_LONG(intern->heap->count - 1); in SPL_METHOD()
1001 spl_ptr_heap_element elem = spl_ptr_heap_delete_top(intern->heap, getThis() TSRMLS_CC); in SPL_METHOD()
1023 RETURN_BOOL(intern->heap->count != 0); in SPL_METHOD()
1043 zval *element = (zval *)intern->heap->elements[0]; in SPL_METHOD()
1049 if (!intern->heap->count || !element) { in SPL_METHOD()
1062 zval **element = (zval **)&intern->heap->elements[0]; in SPL_METHOD()
1068 if (!intern->heap->count || !*element) { in SPL_METHOD()