1*54ba9607SSascha Wildner /* $Id: dba_array.h,v 1.1 2016/07/19 21:31:55 schwarze Exp $ */ 2*54ba9607SSascha Wildner /* 3*54ba9607SSascha Wildner * Copyright (c) 2016 Ingo Schwarze <schwarze@openbsd.org> 4*54ba9607SSascha Wildner * 5*54ba9607SSascha Wildner * Permission to use, copy, modify, and distribute this software for any 6*54ba9607SSascha Wildner * purpose with or without fee is hereby granted, provided that the above 7*54ba9607SSascha Wildner * copyright notice and this permission notice appear in all copies. 8*54ba9607SSascha Wildner * 9*54ba9607SSascha Wildner * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10*54ba9607SSascha Wildner * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11*54ba9607SSascha Wildner * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12*54ba9607SSascha Wildner * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13*54ba9607SSascha Wildner * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14*54ba9607SSascha Wildner * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15*54ba9607SSascha Wildner * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16*54ba9607SSascha Wildner * 17*54ba9607SSascha Wildner * Public interface for allocation-based arrays 18*54ba9607SSascha Wildner * for the mandoc database, for read-write access. 19*54ba9607SSascha Wildner * To be used by dba*.c and by makewhatis(8). 20*54ba9607SSascha Wildner */ 21*54ba9607SSascha Wildner 22*54ba9607SSascha Wildner struct dba_array; 23*54ba9607SSascha Wildner 24*54ba9607SSascha Wildner #define DBA_STR 0x01 /* Map contains strings, not pointers. */ 25*54ba9607SSascha Wildner #define DBA_GROW 0x02 /* Allow the array to grow. */ 26*54ba9607SSascha Wildner 27*54ba9607SSascha Wildner #define dba_array_FOREACH(a, e) \ 28*54ba9607SSascha Wildner dba_array_start(a); \ 29*54ba9607SSascha Wildner while (((e) = dba_array_next(a)) != NULL) 30*54ba9607SSascha Wildner 31*54ba9607SSascha Wildner typedef int dba_compare_func(const void *, const void *); 32*54ba9607SSascha Wildner 33*54ba9607SSascha Wildner struct dba_array *dba_array_new(int32_t, int); 34*54ba9607SSascha Wildner void dba_array_free(struct dba_array *); 35*54ba9607SSascha Wildner void dba_array_set(struct dba_array *, int32_t, void *); 36*54ba9607SSascha Wildner void dba_array_add(struct dba_array *, void *); 37*54ba9607SSascha Wildner void *dba_array_get(struct dba_array *, int32_t); 38*54ba9607SSascha Wildner void dba_array_start(struct dba_array *); 39*54ba9607SSascha Wildner void *dba_array_next(struct dba_array *); 40*54ba9607SSascha Wildner void dba_array_del(struct dba_array *); 41*54ba9607SSascha Wildner void dba_array_undel(struct dba_array *); 42*54ba9607SSascha Wildner void dba_array_setpos(struct dba_array *, int32_t, int32_t); 43*54ba9607SSascha Wildner int32_t dba_array_getpos(struct dba_array *); 44*54ba9607SSascha Wildner void dba_array_sort(struct dba_array *, dba_compare_func); 45*54ba9607SSascha Wildner int32_t dba_array_writelen(struct dba_array *, int32_t); 46*54ba9607SSascha Wildner void dba_array_writepos(struct dba_array *); 47*54ba9607SSascha Wildner void dba_array_writelst(struct dba_array *); 48