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