Initial commit of OpenSPARC T2 architecture model.
[OpenSPARC-T2-SAM] / sam-t2 / devtools / amd64 / man / man3 / Tcl_InitCustomHashTable.3
CommitLineData
920dae64
AT
1'\"
2'\" Copyright (c) 1989-1993 The Regents of the University of California.
3'\" Copyright (c) 1994-1996 Sun Microsystems, Inc.
4'\"
5'\" See the file "license.terms" for information on usage and redistribution
6'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
7'\"
8'\" RCS: @(#) $Id: Hash.3,v 1.10.2.1 2003/07/18 16:56:24 dgp Exp $
9'\"
10'\" The definitions below are for supplemental macros used in Tcl/Tk
11'\" manual entries.
12'\"
13'\" .AP type name in/out ?indent?
14'\" Start paragraph describing an argument to a library procedure.
15'\" type is type of argument (int, etc.), in/out is either "in", "out",
16'\" or "in/out" to describe whether procedure reads or modifies arg,
17'\" and indent is equivalent to second arg of .IP (shouldn't ever be
18'\" needed; use .AS below instead)
19'\"
20'\" .AS ?type? ?name?
21'\" Give maximum sizes of arguments for setting tab stops. Type and
22'\" name are examples of largest possible arguments that will be passed
23'\" to .AP later. If args are omitted, default tab stops are used.
24'\"
25'\" .BS
26'\" Start box enclosure. From here until next .BE, everything will be
27'\" enclosed in one large box.
28'\"
29'\" .BE
30'\" End of box enclosure.
31'\"
32'\" .CS
33'\" Begin code excerpt.
34'\"
35'\" .CE
36'\" End code excerpt.
37'\"
38'\" .VS ?version? ?br?
39'\" Begin vertical sidebar, for use in marking newly-changed parts
40'\" of man pages. The first argument is ignored and used for recording
41'\" the version when the .VS was added, so that the sidebars can be
42'\" found and removed when they reach a certain age. If another argument
43'\" is present, then a line break is forced before starting the sidebar.
44'\"
45'\" .VE
46'\" End of vertical sidebar.
47'\"
48'\" .DS
49'\" Begin an indented unfilled display.
50'\"
51'\" .DE
52'\" End of indented unfilled display.
53'\"
54'\" .SO
55'\" Start of list of standard options for a Tk widget. The
56'\" options follow on successive lines, in four columns separated
57'\" by tabs.
58'\"
59'\" .SE
60'\" End of list of standard options for a Tk widget.
61'\"
62'\" .OP cmdName dbName dbClass
63'\" Start of description of a specific option. cmdName gives the
64'\" option's name as specified in the class command, dbName gives
65'\" the option's name in the option database, and dbClass gives
66'\" the option's class in the option database.
67'\"
68'\" .UL arg1 arg2
69'\" Print arg1 underlined, then print arg2 normally.
70'\"
71'\" RCS: @(#) $Id: man.macros,v 1.4 2000/08/25 06:18:32 ericm Exp $
72'\"
73'\" # Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
74.if t .wh -1.3i ^B
75.nr ^l \n(.l
76.ad b
77'\" # Start an argument description
78.de AP
79.ie !"\\$4"" .TP \\$4
80.el \{\
81. ie !"\\$2"" .TP \\n()Cu
82. el .TP 15
83.\}
84.ta \\n()Au \\n()Bu
85.ie !"\\$3"" \{\
86\&\\$1 \\fI\\$2\\fP (\\$3)
87.\".b
88.\}
89.el \{\
90.br
91.ie !"\\$2"" \{\
92\&\\$1 \\fI\\$2\\fP
93.\}
94.el \{\
95\&\\fI\\$1\\fP
96.\}
97.\}
98..
99'\" # define tabbing values for .AP
100.de AS
101.nr )A 10n
102.if !"\\$1"" .nr )A \\w'\\$1'u+3n
103.nr )B \\n()Au+15n
104.\"
105.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
106.nr )C \\n()Bu+\\w'(in/out)'u+2n
107..
108.AS Tcl_Interp Tcl_CreateInterp in/out
109'\" # BS - start boxed text
110'\" # ^y = starting y location
111'\" # ^b = 1
112.de BS
113.br
114.mk ^y
115.nr ^b 1u
116.if n .nf
117.if n .ti 0
118.if n \l'\\n(.lu\(ul'
119.if n .fi
120..
121'\" # BE - end boxed text (draw box now)
122.de BE
123.nf
124.ti 0
125.mk ^t
126.ie n \l'\\n(^lu\(ul'
127.el \{\
128.\" Draw four-sided box normally, but don't draw top of
129.\" box if the box started on an earlier page.
130.ie !\\n(^b-1 \{\
131\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
132.\}
133.el \}\
134\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
135.\}
136.\}
137.fi
138.br
139.nr ^b 0
140..
141'\" # VS - start vertical sidebar
142'\" # ^Y = starting y location
143'\" # ^v = 1 (for troff; for nroff this doesn't matter)
144.de VS
145.if !"\\$2"" .br
146.mk ^Y
147.ie n 'mc \s12\(br\s0
148.el .nr ^v 1u
149..
150'\" # VE - end of vertical sidebar
151.de VE
152.ie n 'mc
153.el \{\
154.ev 2
155.nf
156.ti 0
157.mk ^t
158\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
159.sp -1
160.fi
161.ev
162.\}
163.nr ^v 0
164..
165'\" # Special macro to handle page bottom: finish off current
166'\" # box/sidebar if in box/sidebar mode, then invoked standard
167'\" # page bottom macro.
168.de ^B
169.ev 2
170'ti 0
171'nf
172.mk ^t
173.if \\n(^b \{\
174.\" Draw three-sided box if this is the box's first page,
175.\" draw two sides but no top otherwise.
176.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
177.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
178.\}
179.if \\n(^v \{\
180.nr ^x \\n(^tu+1v-\\n(^Yu
181\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
182.\}
183.bp
184'fi
185.ev
186.if \\n(^b \{\
187.mk ^y
188.nr ^b 2
189.\}
190.if \\n(^v \{\
191.mk ^Y
192.\}
193..
194'\" # DS - begin display
195.de DS
196.RS
197.nf
198.sp
199..
200'\" # DE - end display
201.de DE
202.fi
203.RE
204.sp
205..
206'\" # SO - start of list of standard options
207.de SO
208.SH "STANDARD OPTIONS"
209.LP
210.nf
211.ta 5.5c 11c
212.ft B
213..
214'\" # SE - end of list of standard options
215.de SE
216.fi
217.ft R
218.LP
219See the \\fBoptions\\fR manual entry for details on the standard options.
220..
221'\" # OP - start of full description for a single option
222.de OP
223.LP
224.nf
225.ta 4c
226Command-Line Name: \\fB\\$1\\fR
227Database Name: \\fB\\$2\\fR
228Database Class: \\fB\\$3\\fR
229.fi
230.IP
231..
232'\" # CS - begin code excerpt
233.de CS
234.RS
235.nf
236.ta .25i .5i .75i 1i
237..
238'\" # CE - end code excerpt
239.de CE
240.fi
241.RE
242..
243.de UL
244\\$1\l'|0\(ul'\\$2
245..
246.TH Tcl_Hash 3 "" Tcl "Tcl Library Procedures"
247.BS
248.SH NAME
249Tcl_InitHashTable, Tcl_InitCustomHashTable, Tcl_InitObjHashTable, Tcl_DeleteHashTable, Tcl_CreateHashEntry, Tcl_DeleteHashEntry, Tcl_FindHashEntry, Tcl_GetHashValue, Tcl_SetHashValue, Tcl_GetHashKey, Tcl_FirstHashEntry, Tcl_NextHashEntry, Tcl_HashStats \- procedures to manage hash tables
250.SH SYNOPSIS
251.nf
252\fB#include <tcl.h>\fR
253.sp
254\fBTcl_InitHashTable\fR(\fItablePtr, keyType\fR)
255.sp
256\fBTcl_InitCustomHashTable\fR(\fItablePtr, keyType, typePtr\fR)
257.sp
258\fBTcl_InitObjHashTable\fR(\fItablePtr\fR)
259.sp
260\fBTcl_DeleteHashTable\fR(\fItablePtr\fR)
261.sp
262Tcl_HashEntry *
263\fBTcl_CreateHashEntry\fR(\fItablePtr, key, newPtr\fR)
264.sp
265\fBTcl_DeleteHashEntry\fR(\fIentryPtr\fR)
266.sp
267Tcl_HashEntry *
268\fBTcl_FindHashEntry\fR(\fItablePtr, key\fR)
269.sp
270ClientData
271\fBTcl_GetHashValue\fR(\fIentryPtr\fR)
272.sp
273\fBTcl_SetHashValue\fR(\fIentryPtr, value\fR)
274.sp
275char *
276\fBTcl_GetHashKey\fR(\fItablePtr, entryPtr\fR)
277.sp
278Tcl_HashEntry *
279\fBTcl_FirstHashEntry\fR(\fItablePtr, searchPtr\fR)
280.sp
281Tcl_HashEntry *
282\fBTcl_NextHashEntry\fR(\fIsearchPtr\fR)
283.sp
284CONST char *
285\fBTcl_HashStats\fR(\fItablePtr\fR)
286.SH ARGUMENTS
287.AS Tcl_HashSearch *searchPtr
288.AP Tcl_HashTable *tablePtr in
289Address of hash table structure (for all procedures but
290\fBTcl_InitHashTable\fR, this must have been initialized by
291previous call to \fBTcl_InitHashTable\fR).
292.AP int keyType in
293Kind of keys to use for new hash table. Must be either
294TCL_STRING_KEYS, TCL_ONE_WORD_KEYS, TCL_CUSTOM_TYPE_KEYS,
295TCL_CUSTOM_PTR_KEYS, or an integer value greater than 1.
296.AP Tcl_HashKeyType *typePtr in
297Address of structure which defines the behaviour of the hash table.
298.AP "CONST char" *key in
299Key to use for probe into table. Exact form depends on
300\fIkeyType\fR used to create table.
301.AP int *newPtr out
302The word at \fI*newPtr\fR is set to 1 if a new entry was created
303and 0 if there was already an entry for \fIkey\fR.
304.AP Tcl_HashEntry *entryPtr in
305Pointer to hash table entry.
306.AP ClientData value in
307New value to assign to hash table entry. Need not have type
308ClientData, but must fit in same space as ClientData.
309.AP Tcl_HashSearch *searchPtr in
310Pointer to record to use to keep track of progress in enumerating
311all the entries in a hash table.
312.BE
313.SH DESCRIPTION
314.PP
315A hash table consists of zero or more entries, each consisting of a
316key and a value. Given the key for an entry, the hashing routines can
317very quickly locate the entry, and hence its value. There may be at
318most one entry in a hash table with a particular key, but many entries
319may have the same value. Keys can take one of four forms: strings,
320one-word values, integer arrays, or custom keys defined by a
321Tcl_HashKeyType structure (See section \fBTHE TCL_HASHKEYTYPE
322STRUCTURE\fR below). All of the keys in a given table have the same
323form, which is specified when the table is initialized.
324.PP
325The value of a hash table entry can be anything that fits in the same
326space as a ``char *'' pointer. Values for hash table entries are
327managed entirely by clients, not by the hash module itself. Typically
328each entry's value is a pointer to a data structure managed by client
329code.
330.PP
331Hash tables grow gracefully as the number of entries increases, so
332that there are always less than three entries per hash bucket, on
333average. This allows for fast lookups regardless of the number of
334entries in a table.
335.PP
336The core provides three functions for the initialization of hash
337tables, Tcl_InitHashTable, Tcl_InitObjHashTable and
338Tcl_InitCustomHashTable.
339.PP
340\fBTcl_InitHashTable\fR initializes a structure that describes a new
341hash table. The space for the structure is provided by the caller,
342not by the hash module. The value of \fIkeyType\fR indicates what
343kinds of keys will be used for all entries in the table. All of the
344key types described later are allowed, with the exception of
345\fBTCL_CUSTOM_TYPE_KEYS\fR and \fBTCL_CUSTOM_PTR_KEYS\fR.
346.PP
347\fBTcl_InitObjHashTable\fR is a wrapper around
348\fBTcl_InitCustomHashTable\fR and initializes a hash table whose keys
349are Tcl_Obj *.
350.PP
351\fBTcl_InitCustomHashTable\fR initializes a structure that describes a
352new hash table. The space for the structure is provided by the
353caller, not by the hash module. The value of \fIkeyType\fR indicates
354what kinds of keys will be used for all entries in the table.
355\fIKeyType\fR must have one of the following values:
356.IP \fBTCL_STRING_KEYS\fR 25
357Keys are null-terminated strings.
358They are passed to hashing routines using the address of the
359first character of the string.
360.IP \fBTCL_ONE_WORD_KEYS\fR 25
361Keys are single-word values; they are passed to hashing routines
362and stored in hash table entries as ``char *'' values.
363The pointer value is the key; it need not (and usually doesn't)
364actually point to a string.
365.IP \fBTCL_CUSTOM_TYPE_KEYS\fR 25
366Keys are of arbitrary type, and are stored in the entry. Hashing
367and comparison is determined by \fItypePtr\fR. The Tcl_HashKeyType
368structure is described in the section
369\fBTHE TCL_HASHKEYTYPE STRUCTURE\fR below.
370.IP \fBTCL_CUSTOM_PTR_KEYS\fR 25
371Keys are pointers to an arbitrary type, and are stored in the entry. Hashing
372and comparison is determined by \fItypePtr\fR. The Tcl_HashKeyType
373structure is described in the section
374\fBTHE TCL_HASHKEYTYPE STRUCTURE\fR below.
375.IP \fIother\fR 25
376If \fIkeyType\fR is not one of the above,
377then it must be an integer value greater than 1.
378In this case the keys will be arrays of ``int'' values, where
379\fIkeyType\fR gives the number of ints in each key.
380This allows structures to be used as keys.
381All keys must have the same size.
382Array keys are passed into hashing functions using the address
383of the first int in the array.
384.PP
385\fBTcl_DeleteHashTable\fR deletes all of the entries in a hash
386table and frees up the memory associated with the table's
387bucket array and entries.
388It does not free the actual table structure (pointed to
389by \fItablePtr\fR), since that memory is assumed to be managed
390by the client.
391\fBTcl_DeleteHashTable\fR also does not free or otherwise
392manipulate the values of the hash table entries.
393If the entry values point to dynamically-allocated memory, then
394it is the client's responsibility to free these structures
395before deleting the table.
396.PP
397\fBTcl_CreateHashEntry\fR locates the entry corresponding to a
398particular key, creating a new entry in the table if there
399wasn't already one with the given key.
400If an entry already existed with the given key then \fI*newPtr\fR
401is set to zero.
402If a new entry was created, then \fI*newPtr\fR is set to a non-zero
403value and the value of the new entry will be set to zero.
404The return value from \fBTcl_CreateHashEntry\fR is a pointer to
405the entry, which may be used to retrieve and modify the entry's
406value or to delete the entry from the table.
407.PP
408\fBTcl_DeleteHashEntry\fR will remove an existing entry from a
409table.
410The memory associated with the entry itself will be freed, but
411the client is responsible for any cleanup associated with the
412entry's value, such as freeing a structure that it points to.
413.PP
414\fBTcl_FindHashEntry\fR is similar to \fBTcl_CreateHashEntry\fR
415except that it doesn't create a new entry if the key doesn't exist;
416instead, it returns NULL as result.
417.PP
418\fBTcl_GetHashValue\fR and \fBTcl_SetHashValue\fR are used to
419read and write an entry's value, respectively.
420Values are stored and retrieved as type ``ClientData'', which is
421large enough to hold a pointer value. On almost all machines this is
422large enough to hold an integer value too.
423.PP
424\fBTcl_GetHashKey\fR returns the key for a given hash table entry,
425either as a pointer to a string, a one-word (``char *'') key, or
426as a pointer to the first word of an array of integers, depending
427on the \fIkeyType\fR used to create a hash table.
428In all cases \fBTcl_GetHashKey\fR returns a result with type
429``char *''.
430When the key is a string or array, the result of \fBTcl_GetHashKey\fR
431points to information in the table entry; this information will
432remain valid until the entry is deleted or its table is deleted.
433.PP
434\fBTcl_FirstHashEntry\fR and \fBTcl_NextHashEntry\fR may be used
435to scan all of the entries in a hash table.
436A structure of type ``Tcl_HashSearch'', provided by the client,
437is used to keep track of progress through the table.
438\fBTcl_FirstHashEntry\fR initializes the search record and
439returns the first entry in the table (or NULL if the table is
440empty).
441Each subsequent call to \fBTcl_NextHashEntry\fR returns the
442next entry in the table or
443NULL if the end of the table has been reached.
444A call to \fBTcl_FirstHashEntry\fR followed by calls to
445\fBTcl_NextHashEntry\fR will return each of the entries in
446the table exactly once, in an arbitrary order.
447It is unadvisable to modify the structure of the table, e.g.
448by creating or deleting entries, while the search is in
449progress.
450.PP
451\fBTcl_HashStats\fR returns a dynamically-allocated string with
452overall information about a hash table, such as the number of
453entries it contains, the number of buckets in its hash array,
454and the utilization of the buckets.
455It is the caller's responsibility to free the result string
456by passing it to \fBckfree\fR.
457.PP
458The header file \fBtcl.h\fR defines the actual data structures
459used to implement hash tables.
460This is necessary so that clients can allocate Tcl_HashTable
461structures and so that macros can be used to read and write
462the values of entries.
463However, users of the hashing routines should never refer directly
464to any of the fields of any of the hash-related data structures;
465use the procedures and macros defined here.
466.SH "THE TCL_HASHKEYTYPE STRUCTURE"
467.PP
468Extension writers can define new hash key types by defining four
469procedures, initializing a Tcl_HashKeyType structure to describe
470the type, and calling \fBTcl_InitCustomHashTable\fR.
471The \fBTcl_HashKeyType\fR structure is defined as follows:
472.CS
473typedef struct Tcl_HashKeyType {
474 int \fIversion\fR;
475 int \fIflags\fR;
476 Tcl_HashKeyProc *\fIhashKeyProc\fR;
477 Tcl_CompareHashKeysProc *\fIcompareKeysProc\fR;
478 Tcl_AllocHashEntryProc *\fIallocEntryProc\fR;
479 Tcl_FreeHashEntryProc *\fIfreeEntryProc\fR;
480} Tcl_HashKeyType;
481.CE
482.PP
483The \fIversion\fR member is the version of the table. If this
484structure is extended in future then the version can be used
485to distinguish between different structures. It should be set
486to \fBTCL_HASH_KEY_TYPE_VERSION\fR.
487.PP
488The \fIflags\fR member is one or more of the following values OR'ed together:
489.IP \fBTCL_HASH_KEY_RANDOMIZE_HASH\fR 25
490There are some things, pointers for example which don't hash well
491because they do not use the lower bits. If this flag is set then the
492hash table will attempt to rectify this by randomising the bits and
493then using the upper N bits as the index into the table.
494.PP
495The \fIhashKeyProc\fR member contains the address of a function
496called to calculate a hash value for the key.
497.CS
498typedef unsigned int (Tcl_HashKeyProc) (
499 Tcl_HashTable *\fItablePtr\fR,
500 VOID *\fIkeyPtr\fR);
501.CE
502If this is NULL then \fIkeyPtr\fR is used and
503\fBTCL_HASH_KEY_RANDOMIZE_HASH\fR is assumed.
504.PP
505The \fIcompareKeysProc\fR member contains the address of a function
506called to compare two keys.
507.CS
508typedef int (Tcl_CompareHashKeysProc) (VOID *\fIkeyPtr\fR,
509 Tcl_HashEntry *\fIhPtr\fR);
510.CE
511If this is NULL then the \fIkeyPtr\fR pointers are compared.
512If the keys don't match then the function returns 0, otherwise
513it returns 1.
514.PP
515The \fIallocEntryProc\fR member contains the address of a function
516called to allocate space for an entry and initialise the key.
517.CS
518typedef Tcl_HashEntry *(Tcl_AllocHashEntryProc) (
519 Tcl_HashTable *\fItablePtr\fR, VOID *\fIkeyPtr\fR);
520.CE
521If this is NULL then Tcl_Alloc is used to allocate enough space for a
522Tcl_HashEntry and the key pointer is assigned to key.oneWordValue.
523String keys and array keys use this function to allocate enough
524space for the entry and the key in one block, rather than doing
525it in two blocks. This saves space for a pointer to the key from
526the entry and another memory allocation. Tcl_Obj * keys use this
527function to allocate enough space for an entry and increment the
528reference count on the object.
529If
530.PP
531The \fIfreeEntryProc\fR member contains the address of a function
532called to free space for an entry.
533.CS
534typedef void (Tcl_FreeHashEntryProc) (Tcl_HashEntry *\fIhPtr\fR);
535.CE
536If this is NULL then Tcl_Free is used to free the space for the
537entry. Tcl_Obj * keys use this function to decrement the
538reference count on the object.
539.SH KEYWORDS
540hash table, key, lookup, search, value