1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22 /* Copyright (c) 1988 AT&T */ 23 /* All Rights Reserved */ 24 25 /* 26 * Copyright 2014 Garrett D'Amore <garrett@damore.org> 27 * 28 * Copyright 2003 Sun Microsystems, Inc. All rights reserved. 29 * Use is subject to license terms. 30 */ 31 32 #ifndef _SEARCH_H 33 #define _SEARCH_H 34 35 #include <sys/feature_tests.h> 36 #include <sys/types.h> 37 38 #ifdef __cplusplus 39 extern "C" { 40 #endif 41 42 /* HSEARCH(3C) */ 43 typedef enum { FIND, ENTER } ACTION; 44 45 #if defined(__EXTENSIONS__) || !defined(_XOPEN_SOURCE) 46 struct qelem { 47 struct qelem *q_forw; 48 struct qelem *q_back; 49 }; 50 #endif /* defined(__EXTENSIONS__) || !defined(_XOPEN_SOURCE) */ 51 52 typedef struct entry { char *key, *data; } ENTRY; 53 54 int hcreate(size_t); 55 void hdestroy(void); 56 ENTRY *hsearch(ENTRY, ACTION); 57 #if defined(__EXTENSIONS__) || !defined(_XOPEN_SOURCE) || defined(_XPG4_2) 58 void insque(void *, void *); 59 void remque(void *); 60 #endif 61 62 63 /* TSEARCH(3C) */ 64 typedef enum { preorder, postorder, endorder, leaf } VISIT; 65 66 void *tdelete(const void *_RESTRICT_KYWD, void **_RESTRICT_KYWD, 67 int (*)(const void *, const void *)); 68 void *tfind(const void *, void *const *, int (*)(const void *, const void *)); 69 void *tsearch(const void *, void **, int (*)(const void *, const void *)); 70 void twalk(const void *, void (*)(const void *, VISIT, int)); 71 72 73 #if defined(__EXTENSIONS__) || !defined(_XOPEN_SOURCE) 74 /* BSEARCH(3C) */ 75 void *bsearch(const void *, const void *, size_t, size_t, 76 int (*)(const void *, const void *)); 77 #endif /* defined(__EXTENSIONS__) || !defined(_XOPEN_SOURCE) */ 78 79 /* LSEARCH(3C) */ 80 void *lfind(const void *, const void *, size_t *, size_t, 81 int (*)(const void *, const void *)); 82 void *lsearch(const void *, void *, size_t *, size_t, 83 int (*)(const void *, const void *)); 84 85 #ifdef __cplusplus 86 } 87 #endif 88 89 #endif /* _SEARCH_H */