xref: /illumos-gate/usr/src/lib/mergeq/mergeq.h (revision bc1f688b)
1*bc1f688bSRobert Mustacchi /*
2*bc1f688bSRobert Mustacchi  * This file and its contents are supplied under the terms of the
3*bc1f688bSRobert Mustacchi  * Common Development and Distribution License ("CDDL"), version 1.0.
4*bc1f688bSRobert Mustacchi  * You may only use this file in accordance with the terms of version
5*bc1f688bSRobert Mustacchi  * 1.0 of the CDDL.
6*bc1f688bSRobert Mustacchi  *
7*bc1f688bSRobert Mustacchi  * A full copy of the text of the CDDL should have accompanied this
8*bc1f688bSRobert Mustacchi  * source.  A copy of the CDDL is also available via the Internet at
9*bc1f688bSRobert Mustacchi  * http://www.illumos.org/license/CDDL.
10*bc1f688bSRobert Mustacchi  */
11*bc1f688bSRobert Mustacchi 
12*bc1f688bSRobert Mustacchi /*
13*bc1f688bSRobert Mustacchi  * Copyright 2015 Joyent, Inc.
14*bc1f688bSRobert Mustacchi  */
15*bc1f688bSRobert Mustacchi 
16*bc1f688bSRobert Mustacchi #ifndef _MERGEQ_H
17*bc1f688bSRobert Mustacchi #define	_MERGEQ_H
18*bc1f688bSRobert Mustacchi 
19*bc1f688bSRobert Mustacchi /*
20*bc1f688bSRobert Mustacchi  * mergeq library routines
21*bc1f688bSRobert Mustacchi  */
22*bc1f688bSRobert Mustacchi 
23*bc1f688bSRobert Mustacchi #include <sys/types.h>
24*bc1f688bSRobert Mustacchi #include <stdint.h>
25*bc1f688bSRobert Mustacchi 
26*bc1f688bSRobert Mustacchi #ifdef __cplusplus
27*bc1f688bSRobert Mustacchi extern "C" {
28*bc1f688bSRobert Mustacchi #endif
29*bc1f688bSRobert Mustacchi 
30*bc1f688bSRobert Mustacchi typedef struct mergeq mergeq_t;
31*bc1f688bSRobert Mustacchi typedef int (mergeq_proc_f)(void *, void *, void **, void *);
32*bc1f688bSRobert Mustacchi 
33*bc1f688bSRobert Mustacchi extern int mergeq_init(mergeq_t **, uint_t);
34*bc1f688bSRobert Mustacchi extern void mergeq_fini(mergeq_t *);
35*bc1f688bSRobert Mustacchi 
36*bc1f688bSRobert Mustacchi extern int mergeq_add(mergeq_t *, void *);
37*bc1f688bSRobert Mustacchi 
38*bc1f688bSRobert Mustacchi #define	MERGEQ_ERROR	-1
39*bc1f688bSRobert Mustacchi #define	MERGEQ_UERROR	-2
40*bc1f688bSRobert Mustacchi extern int mergeq_merge(mergeq_t *, mergeq_proc_f *, void *, void **, int *);
41*bc1f688bSRobert Mustacchi 
42*bc1f688bSRobert Mustacchi /*
43*bc1f688bSRobert Mustacchi  * Routines consumers need to implement
44*bc1f688bSRobert Mustacchi  */
45*bc1f688bSRobert Mustacchi extern void *mergeq_alloc(size_t);
46*bc1f688bSRobert Mustacchi extern void mergeq_free(void *, size_t);
47*bc1f688bSRobert Mustacchi 
48*bc1f688bSRobert Mustacchi #ifdef __cplusplus
49*bc1f688bSRobert Mustacchi }
50*bc1f688bSRobert Mustacchi #endif
51*bc1f688bSRobert Mustacchi 
52*bc1f688bSRobert Mustacchi #endif /* _MERGEQ_H */
53