summaryrefslogtreecommitdiffstats
path: root/upstream/archlinux/man3p/hcreate.3p
diff options
context:
space:
mode:
Diffstat (limited to 'upstream/archlinux/man3p/hcreate.3p')
-rw-r--r--upstream/archlinux/man3p/hcreate.3p213
1 files changed, 213 insertions, 0 deletions
diff --git a/upstream/archlinux/man3p/hcreate.3p b/upstream/archlinux/man3p/hcreate.3p
new file mode 100644
index 00000000..8e41d25d
--- /dev/null
+++ b/upstream/archlinux/man3p/hcreate.3p
@@ -0,0 +1,213 @@
+'\" et
+.TH HCREATE "3P" 2017 "IEEE/The Open Group" "POSIX Programmer's Manual"
+.\"
+.SH PROLOG
+This manual page is part of the POSIX Programmer's Manual.
+The Linux implementation of this interface may differ (consult
+the corresponding Linux manual page for details of Linux behavior),
+or the interface may not be implemented on Linux.
+.\"
+.SH NAME
+hcreate,
+hdestroy,
+hsearch
+\(em manage hash search table
+.SH SYNOPSIS
+.LP
+.nf
+#include <search.h>
+.P
+int hcreate(size_t \fInel\fP);
+void hdestroy(void);
+ENTRY *hsearch(ENTRY \fIitem\fP, ACTION \fIaction\fP);
+.fi
+.SH DESCRIPTION
+The
+\fIhcreate\fR(),
+\fIhdestroy\fR(),
+and
+\fIhsearch\fR()
+functions shall manage hash search tables.
+.P
+The
+\fIhcreate\fR()
+function shall allocate sufficient space for the table, and the
+application shall ensure it is called before
+\fIhsearch\fR()
+is used. The
+.IR nel
+argument is an estimate of the maximum number of entries that the table
+shall contain. This number may be adjusted upward by the algorithm in
+order to obtain certain mathematically favorable circumstances.
+.P
+The
+\fIhdestroy\fR()
+function shall dispose of the search table, and may be followed by
+another call to
+\fIhcreate\fR().
+After the call to
+\fIhdestroy\fR(),
+the data can no longer be considered accessible.
+.P
+The
+\fIhsearch\fR()
+function is a hash-table search routine. It shall return a pointer into a
+hash table indicating the location at which an entry can be found. The
+.IR item
+argument is a structure of type
+.BR ENTRY
+(defined in the
+.IR <search.h>
+header) containing two pointers:
+.IR item.key
+points to the comparison key (a
+.BR "char *" ),
+and
+.IR item.data
+(a
+.BR "void *" )
+points to any other data to be associated with that key. The
+comparison function used by
+\fIhsearch\fR()
+is
+\fIstrcmp\fR().
+The
+.IR action
+argument is a member of an enumeration type
+.BR ACTION
+indicating the disposition of the entry if it cannot be found in the
+table. ENTER indicates that the item should be inserted in the table
+at an appropriate point. FIND indicates that no entry should be made.
+Unsuccessful resolution is indicated by the return of a null pointer.
+.P
+These functions need not be thread-safe.
+.SH "RETURN VALUE"
+The
+\fIhcreate\fR()
+function shall return 0 if it cannot allocate sufficient space for the
+table; otherwise, it shall return non-zero.
+.P
+The
+\fIhdestroy\fR()
+function shall not return a value.
+.P
+The
+\fIhsearch\fR()
+function shall return a null pointer if either the action is FIND and
+the item could not be found or the action is ENTER and the table is
+full.
+.SH ERRORS
+The
+\fIhcreate\fR()
+and
+\fIhsearch\fR()
+functions may fail if:
+.TP
+.BR ENOMEM
+Insufficient storage space is available.
+.LP
+.IR "The following sections are informative."
+.SH "EXAMPLES"
+The following example reads in strings followed by two numbers and
+stores them in a hash table, discarding duplicates. It then reads in
+strings and finds the matching entry in the hash table and prints it
+out.
+.sp
+.RS 4
+.nf
+
+#include <stdio.h>
+#include <search.h>
+#include <string.h>
+.P
+struct info { /* This is the info stored in the table */
+ int age, room; /* other than the key. */
+};
+.P
+#define NUM_EMPL 5000 /* # of elements in search table. */
+.P
+int main(void)
+{
+ char string_space[NUM_EMPL*20]; /* Space to store strings. */
+ struct info info_space[NUM_EMPL]; /* Space to store employee info. */
+ char *str_ptr = string_space; /* Next space in string_space. */
+ struct info *info_ptr = info_space;
+ /* Next space in info_space. */
+ ENTRY item;
+ ENTRY *found_item; /* Name to look for in table. */
+ char name_to_find[30];
+.P
+ int i = 0;
+.P
+ /* Create table; no error checking is performed. */
+ (void) hcreate(NUM_EMPL);
+ while (scanf("%s%d%d", str_ptr, &info_ptr->age,
+ &info_ptr->room) != EOF && i++ < NUM_EMPL) {
+.P
+ /* Put information in structure, and structure in item. */
+ item.key = str_ptr;
+ item.data = info_ptr;
+ str_ptr += strlen(str_ptr) + 1;
+ info_ptr++;
+.P
+ /* Put item into table. */
+ (void) hsearch(item, ENTER);
+ }
+.P
+ /* Access table. */
+ item.key = name_to_find;
+ while (scanf("%s", item.key) != EOF) {
+ if ((found_item = hsearch(item, FIND)) != NULL) {
+.P
+ /* If item is in the table. */
+ (void)printf("found %s, age = %d, room = %d\en",
+ found_item->key,
+ ((struct info *)found_item->data)->age,
+ ((struct info *)found_item->data)->room);
+ } else
+ (void)printf("no such employee %s\en", name_to_find);
+ }
+ return 0;
+}
+.fi
+.P
+.RE
+.SH "APPLICATION USAGE"
+The
+\fIhcreate\fR()
+and
+\fIhsearch\fR()
+functions may use
+\fImalloc\fR()
+to allocate space.
+.SH RATIONALE
+None.
+.SH "FUTURE DIRECTIONS"
+None.
+.SH "SEE ALSO"
+.IR "\fIbsearch\fR\^(\|)",
+.IR "\fIlsearch\fR\^(\|)",
+.IR "\fImalloc\fR\^(\|)",
+.IR "\fIstrcmp\fR\^(\|)",
+.IR "\fItdelete\fR\^(\|)"
+.P
+The Base Definitions volume of POSIX.1\(hy2017,
+.IR "\fB<search.h>\fP"
+.\"
+.SH COPYRIGHT
+Portions of this text are reprinted and reproduced in electronic form
+from IEEE Std 1003.1-2017, Standard for Information Technology
+-- Portable Operating System Interface (POSIX), The Open Group Base
+Specifications Issue 7, 2018 Edition,
+Copyright (C) 2018 by the Institute of
+Electrical and Electronics Engineers, Inc and The Open Group.
+In the event of any discrepancy between this version and the original IEEE and
+The Open Group Standard, the original IEEE and The Open Group Standard
+is the referee document. The original Standard can be obtained online at
+http://www.opengroup.org/unix/online.html .
+.PP
+Any typographical or formatting errors that appear
+in this page are most likely
+to have been introduced during the conversion of the source files to
+man page format. To report such errors, see
+https://www.kernel.org/doc/man-pages/reporting_bugs.html .