summaryrefslogtreecommitdiff
path: root/usr.bin/make/ohash/ohash.3
diff options
context:
space:
mode:
Diffstat (limited to 'usr.bin/make/ohash/ohash.3')
-rw-r--r--usr.bin/make/ohash/ohash.3249
1 files changed, 0 insertions, 249 deletions
diff --git a/usr.bin/make/ohash/ohash.3 b/usr.bin/make/ohash/ohash.3
deleted file mode 100644
index d94b52b05b1..00000000000
--- a/usr.bin/make/ohash/ohash.3
+++ /dev/null
@@ -1,249 +0,0 @@
-.\" $OpenBSD: ohash.3,v 1.2 2001/01/28 15:45:44 espie Exp $
-.\"
-.\" Copyright (c) 1999 Marc Espie.
-.\"
-.\" Code written for the OpenBSD project.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\" notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\" notice, this list of conditions and the following disclaimer in the
-.\" documentation and/or other materials provided with the distribution.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE OPENBSD PROJECT AND CONTRIBUTORS
-.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-.\" A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OPENBSD
-.\" PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-.\" OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-.\"
-.Dd November 3, 1999
-.Dt OPEN_HASH 3
-.Os
-.Sh NAME
-.Nm hash_init ,
-.Nm hash_delete ,
-.Nm hash_lookup_string ,
-.Nm hash_lookup_interval ,
-.Nm hash_lookup_memory ,
-.Nm hash_find ,
-.Nm hash_remove ,
-.Nm hash_insert ,
-.Nm hash_first ,
-.Nm hash_next ,
-.Nm hash_entries
-.Nd light-weight open hashing
-.Sh SYNOPSIS
-.Fd #include <sys/types.h>
-.Fd #include <stddef.h>
-.Fd #include <ohash.h>
-.Ft void
-.Fn hash_init "struct hash *h" "unsigned int size" "struct hash_info *info"
-.Ft void
-.Fn hash_delete "struct hash *h"
-.Ft "unsigned int"
-.Fn hash_lookup_string "struct hash *h" "const char *k" "u_int32_t v"
-.Ft "unsigned int"
-.Fn hash_lookup_interval "struct hash *h" "const char *start" "const char *end" "u_int32_t hv"
-.Ft "unsigned int"
-.Fn hash_lookup_memory "struct hash *h" "const char *k" "size_t s" "u_int32_t hv"
-.Ft void *
-.Fn hash_find "struct hash *h" "unsigned int i"
-.Ft void *
-.Fn hash_remove "struct hash *h" "unsigned int i"
-.Ft void *
-.Fn hash_insert "struct hash *h" "unsigned int i" "void *p"
-.Ft void *
-.Fn hash_first "struct hash *h" "unsigned int *i"
-.Ft void *
-.Fn hash_next "struct hash *h" "unsigned int *i"
-.Ft "unsigned int"
-.Fn hash_entries "struct hash *h"
-.Sh DESCRIPTION
-Those functions have been designed as a fast, extensible alternative to
-the usual hash table functions.
-These provide storing and retrieval of records indexed by keys,
-where a key is a contiguous sequence of bytes at a fixed position in
-each record.
-Keys can either be null-terminated strings, or fixed-size memory areas.
-All functions take a pointer to a hash structure as the
-.Fa h
-function argument.
-Storage for this structure should be provided by user code.
-.Pp
-.Fn hash_init
-initializes the table to store roughly 2 to the power
-.Fa size
-elements.
-.Fa info
-holds the position of the key in each record, and two pointers to
-.Xr calloc 3
-and
-.Xr free 3
--like functions, to use for managing the table internal storage.
-.Pp
-.Fn hash_delete
-frees storage internal to
-.Fa h .
-Elements themselves should be freed by the user first, using for instance
-.Fn hash_first
-and
-.Fn hash_next .
-.Pp
-.Fn hash_lookup_string ,
-.Fn hash_lookup_interval
-and
-.Fn hash_lookup_memory
-are the basic look-up element functions.
-The hashing function result is provided by the user as
-.Fa hv .
-These return a
-.Qq slot
-in the hash table
-.Fa h ,
-to be used with
-.Fn hash_find ,
-.Fn hash_insert ,
-or
-.Fn hash_remove .
-This slot is only valid up to the next call to
-.Fn hash_insert
-or
-.Fn hash_remove .
-.Pp
-.Fn hash_lookup_string
-and
-.Fn hash_lookup_interval
-handle string-like keys.
-.Fn hash_lookup_string
-assumes a null-terminated
-.Ft char *
-.Fa k ,
-whereas
-.Fn hash_lookup_interval
-assumes the key is the interval between
-.Fa start
-and
-.Fa end ,
-exclusive.
-In both cases, the actual elements stored in the hash should contain
-null-terminated keys.
-.Pp
-.Fn hash_lookup_memory
-assumes the key is the memory area starting at
-.Fa k
-of size
-.Fa s .
-All bytes are significant in key comparison.
-.Pp
-.Fn hash_find
-retrieves an element from a slot
-.Fa i
-returned by the
-.Fn hash_lookup*
-functions.
-It returns
-.Va NULL
-if the slot is empty.
-.Pp
-.Fn hash_insert
-inserts a new element
-.Fa p
-at slot
-.Fa i .
-Slot
-.Fa i
-must be empty and element
-.Fa p
-must have a key corresponding to the
-.Fn hash_lookup*
-call.
-.Pp
-.Fn hash_remove
-removes element of hash table at slot
-.Fa i .
-It returns the removed element, for user code to dispose of, or
-.Va NULL
-if the slot was empty.
-.Pp
-.Fn hash_first
-and
-.Fn hash_next
-can be used to access all elements in a hash table, like this:
-.Pp
-.Bd -literal
- for (n = hash_first(h, &i); n != NULL; n = hash_next(h, &i))
- do_something_with(n);
-.Ed
-.Pp
-.Fa i
-points to an auxiliary unsigned integer used to record the current position
-in the hash table.
-Those functions are safe to use even while entries are added to/removed
-from the table, but in such a case they don't guarantee that new entries
-will be returned.
-As a special case, they can safely be used to free elements in the table.
-.Pp
-.Fn hash_entries
-returns the number of elements in the hash table.
-.Sh STORAGE HANDLING
-Only
-.Fn hash_init ,
-.Fn hash_insert ,
-.Fn hash_remove
-and
-.Fn hash_delete
-may call the user-supplied memory functions.
-It is the responsability of the user memory allocation code to verify
-that those calls did not fail.
-.Pp
-In case memory allocation fails,
-.Fn hash_init
-returns a useless hash table.
-.Fn hash_insert
-and
-.Fn hash_remove
-still perform the requested operation, but the returned table should be
-considered read-only.
-It can still be accessed by
-.Fn hash_lookup* ,
-.Fn hash_find ,
-.Fn hash_first
-and
-.Fn hash_next
-to dump relevant information to disk before aborting.
-.Sh THREAD SAFETY
-The open hashing functions are not thread-safe by design.
-In particular, it cannot be guaranteed that a
-.Qq slot
-will not move in a threaded environment between a
-.Fn hash_lookup*
-and a
-.Fn hash_find ,
-.Fn hash_insert
-or
-.Fn hash_remove
-call.
-.Pp
-Multi-threaded applications should explicitly protect hash table access.
-.Sh SEE ALSO
-.Rs
-.%A Donald E. Knuth
-.%B The Art of Computer Programming
-.%V Vol. 3
-.%P pp 506-550
-.%D 1973
-.Re
-.Sh HISTORY
-Those functions were designed and written for
-.Ox
-make
-by Marc Espie in 1999.