xref: /minix3/lib/libc/include/isc/heap.h (revision 2fe8fb192fe7e8720e3e7a77f928da545e872a6a)
1*2fe8fb19SBen Gras /*	$NetBSD: heap.h,v 1.1.1.4 2009/04/12 16:35:44 christos Exp $	*/
2*2fe8fb19SBen Gras 
3*2fe8fb19SBen Gras /*
4*2fe8fb19SBen Gras  * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
5*2fe8fb19SBen Gras  * Copyright (c) 1997,1999 by Internet Software Consortium.
6*2fe8fb19SBen Gras  *
7*2fe8fb19SBen Gras  * Permission to use, copy, modify, and distribute this software for any
8*2fe8fb19SBen Gras  * purpose with or without fee is hereby granted, provided that the above
9*2fe8fb19SBen Gras  * copyright notice and this permission notice appear in all copies.
10*2fe8fb19SBen Gras  *
11*2fe8fb19SBen Gras  * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
12*2fe8fb19SBen Gras  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13*2fe8fb19SBen Gras  * MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
14*2fe8fb19SBen Gras  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15*2fe8fb19SBen Gras  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16*2fe8fb19SBen Gras  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
17*2fe8fb19SBen Gras  * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18*2fe8fb19SBen Gras  */
19*2fe8fb19SBen Gras 
20*2fe8fb19SBen Gras typedef int (*heap_higher_priority_func)(void *, void *);
21*2fe8fb19SBen Gras typedef void (*heap_index_func)(void *, int);
22*2fe8fb19SBen Gras typedef void (*heap_for_each_func)(void *, void *);
23*2fe8fb19SBen Gras 
24*2fe8fb19SBen Gras typedef struct heap_context {
25*2fe8fb19SBen Gras 	int array_size;
26*2fe8fb19SBen Gras 	int array_size_increment;
27*2fe8fb19SBen Gras 	int heap_size;
28*2fe8fb19SBen Gras 	void **heap;
29*2fe8fb19SBen Gras 	heap_higher_priority_func higher_priority;
30*2fe8fb19SBen Gras 	heap_index_func index;
31*2fe8fb19SBen Gras } *heap_context;
32*2fe8fb19SBen Gras 
33*2fe8fb19SBen Gras #define heap_new	__heap_new
34*2fe8fb19SBen Gras #define heap_free	__heap_free
35*2fe8fb19SBen Gras #define heap_insert	__heap_insert
36*2fe8fb19SBen Gras #define heap_delete	__heap_delete
37*2fe8fb19SBen Gras #define heap_increased	__heap_increased
38*2fe8fb19SBen Gras #define heap_decreased	__heap_decreased
39*2fe8fb19SBen Gras #define heap_element	__heap_element
40*2fe8fb19SBen Gras #define heap_for_each	__heap_for_each
41*2fe8fb19SBen Gras 
42*2fe8fb19SBen Gras heap_context	heap_new(heap_higher_priority_func, heap_index_func, int);
43*2fe8fb19SBen Gras int		heap_free(heap_context);
44*2fe8fb19SBen Gras int		heap_insert(heap_context, void *);
45*2fe8fb19SBen Gras int		heap_delete(heap_context, int);
46*2fe8fb19SBen Gras int		heap_increased(heap_context, int);
47*2fe8fb19SBen Gras int		heap_decreased(heap_context, int);
48*2fe8fb19SBen Gras void *		heap_element(heap_context, int);
49*2fe8fb19SBen Gras int		heap_for_each(heap_context, heap_for_each_func, void *);
50*2fe8fb19SBen Gras 
51*2fe8fb19SBen Gras /*! \file */
52