/* * Copyright (C) Internet Systems Consortium, Inc. ("ISC") * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * * See the COPYRIGHT file distributed with this work for additional * information regarding copyright ownership. */ #ifndef ISC_HEAP_H #define ISC_HEAP_H 1 /*! \file isc/heap.h */ #include <isc/lang.h> #include <isc/types.h> ISC_LANG_BEGINDECLS /*% * The comparison function returns ISC_TRUE if the first argument has * higher priority than the second argument, and ISC_FALSE otherwise. */ typedef isc_boolean_t (*isc_heapcompare_t)(void *, void *); /*% * The index function allows the client of the heap to receive a callback * when an item's index number changes. This allows it to maintain * sync with its external state, but still delete itself, since deletions * from the heap require the index be provided. */ typedef void (*isc_heapindex_t)(void *, unsigned int); /*% * The heapaction function is used when iterating over the heap. * * NOTE: The heap structure CANNOT BE MODIFIED during the call to * isc_heap_foreach(). */ typedef void (*isc_heapaction_t)(void *, void *); typedef struct isc_heap isc_heap_t; isc_result_t isc_heap_create(isc_mem_t *mctx, isc_heapcompare_t compare, isc_heapindex_t index, unsigned int size_increment, isc_heap_t **heapp); /*!< * \brief Create a new heap. The heap is implemented using a space-efficient * storage method. When the heap elements are deleted space is not freed * but will be reused when new elements are inserted. * * Heap elements are indexed from 1. * * Requires: *\li "mctx" is valid. *\li "compare" is a function which takes two void * arguments and * returns ISC_TRUE if the first argument has a higher priority than * the second, and ISC_FALSE otherwise. *\li "index" is a function which takes a void *, and an unsigned int * argument. This function will be called whenever an element's * index value changes, so it may continue to delete itself from the * heap. This option may be NULL if this functionality is unneeded. *\li "size_increment" is a hint about how large the heap should grow * when resizing is needed. If this is 0, a default size will be * used, which is currently 1024, allowing space for an additional 1024 * heap elements to be inserted before adding more space. *\li "heapp" is not NULL, and "*heap" is NULL. * * Returns: *\li ISC_R_SUCCESS - success *\li ISC_R_NOMEMORY - insufficient memory */ void isc_heap_destroy(isc_heap_t **heapp); /*!< * \brief Destroys a heap. * * Requires: *\li "heapp" is not NULL and "*heap" points to a valid isc_heap_t. */ isc_result_t isc_heap_insert(isc_heap_t *heap, void *elt); /*!< * \brief Inserts a new element into a heap. * * Requires: *\li "heapp" is not NULL and "*heap" points to a valid isc_heap_t. */ void isc_heap_delete(isc_heap_t *heap, unsigned int index); /*!< * \brief Deletes an element from a heap, by element index. * * Requires: *\li "heapp" is not NULL and "*heap" points to a valid isc_heap_t. *\li "index" is a valid element index, as provided by the "index" callback * provided during heap creation. */ void isc_heap_increased(isc_heap_t *heap, unsigned int index); /*!< * \brief Indicates to the heap that an element's priority has increased. * This function MUST be called whenever an element has increased in priority. * * Requires: *\li "heapp" is not NULL and "*heap" points to a valid isc_heap_t. *\li "index" is a valid element index, as provided by the "index" callback * provided during heap creation. */ void isc_heap_decreased(isc_heap_t *heap, unsigned int index); /*!< * \brief Indicates to the heap that an element's priority has decreased. * This function MUST be called whenever an element has decreased in priority. * * Requires: *\li "heapp" is not NULL and "*heap" points to a valid isc_heap_t. *\li "index" is a valid element index, as provided by the "index" callback * provided during heap creation. */ void * isc_heap_element(isc_heap_t *heap, unsigned int index); /*!< * \brief Returns the element for a specific element index. * * Requires: *\li "heapp" is not NULL and "*heap" points to a valid isc_heap_t. *\li "index" is a valid element index, as provided by the "index" callback * provided during heap creation. * * Returns: *\li A pointer to the element for the element index. */ void isc_heap_foreach(isc_heap_t *heap, isc_heapaction_t action, void *uap); /*!< * \brief Iterate over the heap, calling an action for each element. The * order of iteration is not sorted. * * Requires: *\li "heapp" is not NULL and "*heap" points to a valid isc_heap_t. *\li "action" is not NULL, and is a function which takes two arguments. * The first is a void *, representing the element, and the second is * "uap" as provided to isc_heap_foreach. *\li "uap" is a caller-provided argument, and may be NULL. * * Note: *\li The heap structure CANNOT be modified during this iteration. The only * safe function to call while iterating the heap is isc_heap_element(). */ ISC_LANG_ENDDECLS #endif /* ISC_HEAP_H */
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
aes.h | File | 1.05 KB | 0644 |
|
app.h | File | 10.23 KB | 0644 |
|
assertions.h | File | 2.78 KB | 0644 |
|
atomic.h | File | 4.15 KB | 0644 |
|
backtrace.h | File | 3.8 KB | 0644 |
|
base32.h | File | 3.94 KB | 0644 |
|
base64.h | File | 2.39 KB | 0644 |
|
bind9.h | File | 849 B | 0644 |
|
boolean.h | File | 746 B | 0644 |
|
buffer.h | File | 25.69 KB | 0644 |
|
bufferlist.h | File | 1.42 KB | 0644 |
|
commandline.h | File | 1.69 KB | 0644 |
|
condition.h | File | 1.44 KB | 0644 |
|
counter.h | File | 1.88 KB | 0644 |
|
crc64.h | File | 986 B | 0644 |
|
deprecated.h | File | 622 B | 0644 |
|
dir.h | File | 1.96 KB | 0644 |
|
entropy.h | File | 8.76 KB | 0644 |
|
errno.h | File | 658 B | 0644 |
|
errno2result.h | File | 893 B | 0644 |
|
error.h | File | 1.4 KB | 0644 |
|
event.h | File | 2.98 KB | 0644 |
|
eventclass.h | File | 1.35 KB | 0644 |
|
file.h | File | 11.43 KB | 0644 |
|
formatcheck.h | File | 892 B | 0644 |
|
fsaccess.h | File | 7.25 KB | 0644 |
|
hash.h | File | 7.52 KB | 0644 |
|
heap.h | File | 5.14 KB | 0644 |
|
hex.h | File | 2.33 KB | 0644 |
|
hmacmd5.h | File | 1.75 KB | 0644 |
|
hmacsha.h | File | 4.44 KB | 0644 |
|
ht.h | File | 4.29 KB | 0644 |
|
httpd.h | File | 2.26 KB | 0644 |
|
int.h | File | 1.37 KB | 0644 |
|
interfaceiter.h | File | 3.03 KB | 0644 |
|
iterated_hash.h | File | 1.02 KB | 0644 |
|
json.h | File | 1.42 KB | 0644 |
|
keyboard.h | File | 976 B | 0644 |
|
lang.h | File | 636 B | 0644 |
|
lex.h | File | 9.42 KB | 0644 |
|
lfsr.h | File | 2.88 KB | 0644 |
|
lib.h | File | 1.04 KB | 0644 |
|
likely.h | File | 718 B | 0644 |
|
list.h | File | 5.65 KB | 0644 |
|
log.h | File | 28.06 KB | 0644 |
|
magic.h | File | 993 B | 0644 |
|
md5.h | File | 2.34 KB | 0644 |
|
mem.h | File | 20.63 KB | 0644 |
|
meminfo.h | File | 690 B | 0644 |
|
msgcat.h | File | 2.66 KB | 0644 |
|
msgs.h | File | 8.22 KB | 0644 |
|
mutex.h | File | 3.44 KB | 0644 |
|
mutexblock.h | File | 1.34 KB | 0644 |
|
net.h | File | 10.32 KB | 0644 |
|
netaddr.h | File | 4.56 KB | 0644 |
|
netdb.h | File | 862 B | 0644 |
|
netscope.h | File | 947 B | 0644 |
|
offset.h | File | 699 B | 0644 |
|
once.h | File | 981 B | 0644 |
|
ondestroy.h | File | 2.79 KB | 0644 |
|
os.h | File | 670 B | 0644 |
|
parseint.h | File | 1.49 KB | 0644 |
|
platform.h | File | 9.31 KB | 0644 |
|
pool.h | File | 3.42 KB | 0644 |
|
portset.h | File | 3.21 KB | 0644 |
|
print.h | File | 2.49 KB | 0644 |
|
queue.h | File | 4.66 KB | 0644 |
|
quota.h | File | 2.29 KB | 0644 |
|
radix.h | File | 6.37 KB | 0644 |
|
random.h | File | 2.99 KB | 0644 |
|
ratelimiter.h | File | 3.38 KB | 0644 |
|
refcount.h | File | 7.89 KB | 0644 |
|
regex.h | File | 766 B | 0644 |
|
region.h | File | 1.99 KB | 0644 |
|
resource.h | File | 2.8 KB | 0644 |
|
result.h | File | 4.62 KB | 0644 |
|
resultclass.h | File | 1.56 KB | 0644 |
|
rwlock.h | File | 3.6 KB | 0644 |
|
safe.h | File | 1.21 KB | 0644 |
|
serial.h | File | 1.4 KB | 0644 |
|
sha1.h | File | 1.52 KB | 0644 |
|
sha2.h | File | 5.65 KB | 0644 |
|
sockaddr.h | File | 6 KB | 0644 |
|
socket.h | File | 35.81 KB | 0644 |
|
stat.h | File | 805 B | 0644 |
|
stats.h | File | 3.02 KB | 0644 |
|
stdio.h | File | 1.74 KB | 0644 |
|
stdlib.h | File | 703 B | 0644 |
|
stdtime.h | File | 1.3 KB | 0644 |
|
strerror.h | File | 776 B | 0644 |
|
string.h | File | 5.94 KB | 0644 |
|
symtab.h | File | 4.21 KB | 0644 |
|
syslog.h | File | 843 B | 0644 |
|
task.h | File | 21.08 KB | 0644 |
|
taskpool.h | File | 3.61 KB | 0644 |
|
thread.h | File | 1.47 KB | 0644 |
|
time.h | File | 8.66 KB | 0644 |
|
timer.h | File | 10.54 KB | 0644 |
|
tm.h | File | 894 B | 0644 |
|
types.h | File | 5.54 KB | 0644 |
|
util.h | File | 7.49 KB | 0644 |
|
version.h | File | 688 B | 0644 |
|
xml.h | File | 1.07 KB | 0644 |
|