xref: /freebsd/lib/libopenbsd/ohash_interval.3 (revision fa9896e082a1046ff4fbc75fcba4d18d1f2efc19)
1*a36eca08SCraig Rodrigues.\"	$OpenBSD: ohash_interval.3,v 1.1 2014/05/12 19:09:00 espie Exp $
2*a36eca08SCraig Rodrigues.\" Copyright (c) 2001 Marc Espie <espie@openbsd.org>
3*a36eca08SCraig Rodrigues.\"
4*a36eca08SCraig Rodrigues.\" Permission to use, copy, modify, and distribute this software for any
5*a36eca08SCraig Rodrigues.\" purpose with or without fee is hereby granted, provided that the above
6*a36eca08SCraig Rodrigues.\" copyright notice and this permission notice appear in all copies.
7*a36eca08SCraig Rodrigues.\"
8*a36eca08SCraig Rodrigues.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9*a36eca08SCraig Rodrigues.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10*a36eca08SCraig Rodrigues.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11*a36eca08SCraig Rodrigues.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12*a36eca08SCraig Rodrigues.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13*a36eca08SCraig Rodrigues.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14*a36eca08SCraig Rodrigues.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15*a36eca08SCraig Rodrigues.\"
16*a36eca08SCraig Rodrigues.Dd June 5, 2013
17*a36eca08SCraig Rodrigues.Dt OHASH_INTERVAL 3
18*a36eca08SCraig Rodrigues.Os
19*a36eca08SCraig Rodrigues.Sh NAME
20*a36eca08SCraig Rodrigues.Nm ohash_interval ,
21*a36eca08SCraig Rodrigues.Nm ohash_create_entry ,
22*a36eca08SCraig Rodrigues.Nm ohash_qlookup ,
23*a36eca08SCraig Rodrigues.Nm ohash_qlookupi
24*a36eca08SCraig Rodrigues.Nd helper functions for open hashing
25*a36eca08SCraig Rodrigues.Sh SYNOPSIS
26*a36eca08SCraig Rodrigues.In stdint.h
27*a36eca08SCraig Rodrigues.In stddef.h
28*a36eca08SCraig Rodrigues.In ohash.h
29*a36eca08SCraig Rodrigues.Ft uint32_t
30*a36eca08SCraig Rodrigues.Fn ohash_interval "const char *start" "const char **pend"
31*a36eca08SCraig Rodrigues.Ft "void *"
32*a36eca08SCraig Rodrigues.Fn ohash_create_entry "struct ohash_info *info" "const char *start" "const char **pend"
33*a36eca08SCraig Rodrigues.Ft "unsigned int"
34*a36eca08SCraig Rodrigues.Fn ohash_qlookupi "struct ohash *h" "const char *start" "const char **pend"
35*a36eca08SCraig Rodrigues.Ft "unsigned int"
36*a36eca08SCraig Rodrigues.Fn ohash_qlookup "struct ohash *h" "const char *start"
37*a36eca08SCraig Rodrigues.Sh DESCRIPTION
38*a36eca08SCraig RodriguesThese functions are commonly used to simplify open hashing usage, and use
39*a36eca08SCraig Rodriguessimilar conventions.
40*a36eca08SCraig RodriguesThey operate indifferently on NUL-terminated strings
41*a36eca08SCraig Rodrigues.Po
42*a36eca08SCraig Rodriguesby setting
43*a36eca08SCraig Rodrigues.Fa *pend
44*a36eca08SCraig Rodrigues=
45*a36eca08SCraig Rodrigues.Dv NULL
46*a36eca08SCraig Rodrigues.Pc
47*a36eca08SCraig Rodriguesor memory ranges
48*a36eca08SCraig Rodrigues.Po
49*a36eca08SCraig Rodriguesdelimited by
50*a36eca08SCraig Rodrigues.Fa start
51*a36eca08SCraig Rodriguesand
52*a36eca08SCraig Rodrigues.Fa *pend
53*a36eca08SCraig Rodrigues.Pc .
54*a36eca08SCraig RodriguesFor NUL-terminated strings, as a side effect, those functions
55*a36eca08SCraig Rodriguesset
56*a36eca08SCraig Rodrigues.Fa *pend
57*a36eca08SCraig Rodriguesto the terminating NUL byte.
58*a36eca08SCraig Rodrigues.Pp
59*a36eca08SCraig Rodrigues.Fn ohash_interval
60*a36eca08SCraig Rodriguesis a simple hashing function that yields good results on common data sets.
61*a36eca08SCraig Rodrigues.Pp
62*a36eca08SCraig Rodrigues.Fn ohash_create_entry
63*a36eca08SCraig Rodriguescan be used to create a new record with a given key.
64*a36eca08SCraig RodriguesIn that case,
65*a36eca08SCraig Rodriguesthe alloc field of
66*a36eca08SCraig Rodrigues.Fa info
67*a36eca08SCraig Rodriguesshould point to a
68*a36eca08SCraig Rodrigues.Xr malloc 3 Ns -like
69*a36eca08SCraig Rodriguesfunction to allocate the storage:
70*a36eca08SCraig Rodrigues.Bd -literal -offset indent
71*a36eca08SCraig Rodriguesp = (*info->alloc)(sz, info->data);
72*a36eca08SCraig Rodrigues.Ed
73*a36eca08SCraig Rodrigues.Pp
74*a36eca08SCraig Rodrigues.Fn ohash_qlookupi
75*a36eca08SCraig Rodriguesis a wrapper function that simply calls
76*a36eca08SCraig Rodrigues.Fn ohash_interval
77*a36eca08SCraig Rodriguesand
78*a36eca08SCraig Rodrigues.Fn ohash_lookup_interval .
79*a36eca08SCraig Rodrigues.Pp
80*a36eca08SCraig Rodrigues.Fn ohash_qlookup
81*a36eca08SCraig Rodriguesis a variation on
82*a36eca08SCraig Rodrigues.Fn ohash_qlookupi
83*a36eca08SCraig Rodriguesdesigned for NUL-terminated strings.
84*a36eca08SCraig Rodrigues.Sh SEE ALSO
85*a36eca08SCraig Rodrigues.Xr ohash_init 3
86*a36eca08SCraig Rodrigues.Sh STANDARDS
87*a36eca08SCraig RodriguesThose functions are completely non-standard and should be avoided in
88*a36eca08SCraig Rodriguesportable programs.
89*a36eca08SCraig Rodrigues.Sh HISTORY
90*a36eca08SCraig RodriguesThose functions were designed and written for
91*a36eca08SCraig Rodrigues.Ox
92*a36eca08SCraig Rodrigues.Xr make 1
93*a36eca08SCraig Rodriguesby Marc Espie in 1999.
94