]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
add fr_heap_pop()
authorAlan T. DeKok <aland@freeradius.org>
Mon, 7 Nov 2016 17:45:50 +0000 (12:45 -0500)
committerAlan T. DeKok <aland@freeradius.org>
Mon, 7 Nov 2016 18:37:36 +0000 (13:37 -0500)
src/include/heap.h
src/lib/heap.c

index d39ec7eafd5dc31b3b71fb183a9f7c66ecca151a..e3825d0561c14bce4a20057d63bd534d4ea84fe8 100644 (file)
@@ -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);
index 858568eb07cc38b88d27d2038f90f268591281ec..e260ee0c2bcba4a16572e378fae55f526d32429c 100644 (file)
@@ -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;