xref: /titanic_52/usr/src/head/search.h (revision 68b2bbf26c7040fea4281dcb58b81e7627e46f34)
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 */
90