From: Alan T. DeKok Date: Mon, 7 Nov 2016 17:45:50 +0000 (-0500) Subject: add fr_heap_pop() X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e27b273cd9ec9485b032f25708b28a57f2345aba;p=thirdparty%2Ffreeradius-server.git add fr_heap_pop() --- diff --git a/src/include/heap.h b/src/include/heap.h index d39ec7eafd5..e3825d0561c 100644 --- a/src/include/heap.h +++ b/src/include/heap.h @@ -37,6 +37,7 @@ void fr_heap_delete(fr_heap_t *hp); int fr_heap_insert(fr_heap_t *hp, void *data); int fr_heap_extract(fr_heap_t *hp, void *data); +void *fr_heap_pop(fr_heap_t *hp) CC_HINT(nonnull); void *fr_heap_peek(fr_heap_t *hp); void *fr_heap_peek_tail(fr_heap_t *hp); size_t fr_heap_num_elements(fr_heap_t *hp); diff --git a/src/lib/heap.c b/src/lib/heap.c index 858568eb07c..e260ee0c2bc 100644 --- a/src/lib/heap.c +++ b/src/lib/heap.c @@ -224,6 +224,20 @@ void *fr_heap_peek(fr_heap_t *hp) return hp->p[0]; } +void *fr_heap_pop(fr_heap_t *hp) +{ + void *data; + + if (hp->num_elements == 0) return NULL; + + data = hp->p[0]; + + (void) fr_heap_extract(hp, data); + + return data; +} + + void *fr_heap_peek_tail(fr_heap_t *hp) { if (!hp || (hp->num_elements == 0)) return NULL;