OSDN Git Service

FIRST REPOSITORY
[eos/hostdependOTHERS.git] / I386LINUX / util / I386LINUX / man / man3 / Tcl_InitObjHashTable.3
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
219 See 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
226 Command-Line Name:      \\fB\\$1\\fR
227 Database Name:  \\fB\\$2\\fR
228 Database 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
249 Tcl_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
262 Tcl_HashEntry *
263 \fBTcl_CreateHashEntry\fR(\fItablePtr, key, newPtr\fR)
264 .sp
265 \fBTcl_DeleteHashEntry\fR(\fIentryPtr\fR)
266 .sp
267 Tcl_HashEntry *
268 \fBTcl_FindHashEntry\fR(\fItablePtr, key\fR)
269 .sp
270 ClientData
271 \fBTcl_GetHashValue\fR(\fIentryPtr\fR)
272 .sp
273 \fBTcl_SetHashValue\fR(\fIentryPtr, value\fR)
274 .sp
275 char *
276 \fBTcl_GetHashKey\fR(\fItablePtr, entryPtr\fR)
277 .sp
278 Tcl_HashEntry *
279 \fBTcl_FirstHashEntry\fR(\fItablePtr, searchPtr\fR)
280 .sp
281 Tcl_HashEntry *
282 \fBTcl_NextHashEntry\fR(\fIsearchPtr\fR)
283 .sp
284 CONST char *
285 \fBTcl_HashStats\fR(\fItablePtr\fR)
286 .SH ARGUMENTS
287 .AS Tcl_HashSearch *searchPtr
288 .AP Tcl_HashTable *tablePtr in
289 Address of hash table structure (for all procedures but
290 \fBTcl_InitHashTable\fR, this must have been initialized by
291 previous call to \fBTcl_InitHashTable\fR).
292 .AP int keyType in
293 Kind of keys to use for new hash table.  Must be either
294 TCL_STRING_KEYS, TCL_ONE_WORD_KEYS, TCL_CUSTOM_TYPE_KEYS,
295 TCL_CUSTOM_PTR_KEYS, or an integer value greater than 1.
296 .AP Tcl_HashKeyType *typePtr in
297 Address of structure which defines the behaviour of the hash table.
298 .AP "CONST char" *key in
299 Key to use for probe into table.  Exact form depends on
300 \fIkeyType\fR used to create table.
301 .AP int *newPtr out
302 The word at \fI*newPtr\fR is set to 1 if a new entry was created
303 and 0 if there was already an entry for \fIkey\fR.
304 .AP Tcl_HashEntry *entryPtr in
305 Pointer to hash table entry.
306 .AP ClientData value in
307 New value to assign to hash table entry.  Need not have type
308 ClientData, but must fit in same space as ClientData.
309 .AP Tcl_HashSearch *searchPtr in
310 Pointer to record to use to keep track of progress in enumerating
311 all the entries in a hash table.
312 .BE
313 .SH DESCRIPTION
314 .PP
315 A hash table consists of zero or more entries, each consisting of a
316 key and a value.  Given the key for an entry, the hashing routines can
317 very quickly locate the entry, and hence its value. There may be at
318 most one entry in a hash table with a particular key, but many entries
319 may have the same value.  Keys can take one of four forms: strings,
320 one-word values, integer arrays, or custom keys defined by a
321 Tcl_HashKeyType structure (See section \fBTHE TCL_HASHKEYTYPE
322 STRUCTURE\fR below). All of the keys in a given table have the same
323 form, which is specified when the table is initialized.
324 .PP
325 The value of a hash table entry can be anything that fits in the same
326 space as a ``char *'' pointer.  Values for hash table entries are
327 managed entirely by clients, not by the hash module itself.  Typically
328 each entry's value is a pointer to a data structure managed by client
329 code.
330 .PP
331 Hash tables grow gracefully as the number of entries increases, so
332 that there are always less than three entries per hash bucket, on
333 average. This allows for fast lookups regardless of the number of
334 entries in a table.
335 .PP
336 The core provides three functions for the initialization of hash
337 tables, Tcl_InitHashTable, Tcl_InitObjHashTable and
338 Tcl_InitCustomHashTable.
339 .PP
340 \fBTcl_InitHashTable\fR initializes a structure that describes a new
341 hash table.  The space for the structure is provided by the caller,
342 not by the hash module.  The value of \fIkeyType\fR indicates what
343 kinds of keys will be used for all entries in the table. All of the
344 key 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
349 are Tcl_Obj *.
350 .PP
351 \fBTcl_InitCustomHashTable\fR initializes a structure that describes a
352 new hash table. The space for the structure is provided by the
353 caller, not by the hash module.  The value of \fIkeyType\fR indicates
354 what 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
357 Keys are null-terminated strings.
358 They are passed to hashing routines using the address of the
359 first character of the string.
360 .IP \fBTCL_ONE_WORD_KEYS\fR 25
361 Keys are single-word values;  they are passed to hashing routines
362 and stored in hash table entries as ``char *'' values.
363 The pointer value is the key;  it need not (and usually doesn't)
364 actually point to a string.
365 .IP \fBTCL_CUSTOM_TYPE_KEYS\fR 25
366 Keys are of arbitrary type, and are stored in the entry. Hashing
367 and comparison is determined by \fItypePtr\fR. The Tcl_HashKeyType 
368 structure is described in the section 
369 \fBTHE TCL_HASHKEYTYPE STRUCTURE\fR below.
370 .IP \fBTCL_CUSTOM_PTR_KEYS\fR 25
371 Keys are pointers to an arbitrary type, and are stored in the entry. Hashing
372 and comparison is determined by \fItypePtr\fR. The Tcl_HashKeyType 
373 structure is described in the section 
374 \fBTHE TCL_HASHKEYTYPE STRUCTURE\fR below.
375 .IP \fIother\fR 25
376 If \fIkeyType\fR is not one of the above,
377 then it must be an integer value greater than 1.
378 In this case the keys will be arrays of ``int'' values, where
379 \fIkeyType\fR gives the number of ints in each key.
380 This allows structures to be used as keys.
381 All keys must have the same size.
382 Array keys are passed into hashing functions using the address
383 of the first int in the array.
384 .PP
385 \fBTcl_DeleteHashTable\fR deletes all of the entries in a hash
386 table and frees up the memory associated with the table's
387 bucket array and entries.
388 It does not free the actual table structure (pointed to
389 by \fItablePtr\fR), since that memory is assumed to be managed
390 by the client.
391 \fBTcl_DeleteHashTable\fR also does not free or otherwise
392 manipulate the values of the hash table entries.
393 If the entry values point to dynamically-allocated memory, then
394 it is the client's responsibility to free these structures
395 before deleting the table.
396 .PP
397 \fBTcl_CreateHashEntry\fR locates the entry corresponding to a
398 particular key, creating a new entry in the table if there
399 wasn't already one with the given key.
400 If an entry already existed with the given key then \fI*newPtr\fR
401 is set to zero.
402 If a new entry was created, then \fI*newPtr\fR is set to a non-zero
403 value and the value of the new entry will be set to zero.
404 The return value from \fBTcl_CreateHashEntry\fR is a pointer to
405 the entry, which may be used to retrieve and modify the entry's
406 value or to delete the entry from the table.
407 .PP
408 \fBTcl_DeleteHashEntry\fR will remove an existing entry from a
409 table.
410 The memory associated with the entry itself will be freed, but
411 the client is responsible for any cleanup associated with the
412 entry's value, such as freeing a structure that it points to.
413 .PP
414 \fBTcl_FindHashEntry\fR is similar to \fBTcl_CreateHashEntry\fR
415 except that it doesn't create a new entry if the key doesn't exist;
416 instead, it returns NULL as result.
417 .PP
418 \fBTcl_GetHashValue\fR and \fBTcl_SetHashValue\fR are used to
419 read and write an entry's value, respectively.
420 Values are stored and retrieved as type ``ClientData'', which is
421 large enough to hold a pointer value.  On almost all machines this is
422 large enough to hold an integer value too.
423 .PP
424 \fBTcl_GetHashKey\fR returns the key for a given hash table entry,
425 either as a pointer to a string, a one-word (``char *'') key, or
426 as a pointer to the first word of an array of integers, depending
427 on the \fIkeyType\fR used to create a hash table.
428 In all cases \fBTcl_GetHashKey\fR returns a result with type
429 ``char *''.
430 When the key is a string or array, the result of \fBTcl_GetHashKey\fR
431 points to information in the table entry;  this information will
432 remain valid until the entry is deleted or its table is deleted.
433 .PP
434 \fBTcl_FirstHashEntry\fR and \fBTcl_NextHashEntry\fR may be used
435 to scan all of the entries in a hash table.
436 A structure of type ``Tcl_HashSearch'', provided by the client,
437 is used to keep track of progress through the table.
438 \fBTcl_FirstHashEntry\fR initializes the search record and
439 returns the first entry in the table (or NULL if the table is
440 empty).
441 Each subsequent call to \fBTcl_NextHashEntry\fR returns the
442 next entry in the table or
443 NULL if the end of the table has been reached.
444 A call to \fBTcl_FirstHashEntry\fR followed by calls to
445 \fBTcl_NextHashEntry\fR will return each of the entries in
446 the table exactly once, in an arbitrary order.
447 It is unadvisable to modify the structure of the table, e.g.
448 by creating or deleting entries, while the search is in
449 progress.
450 .PP
451 \fBTcl_HashStats\fR returns a dynamically-allocated string with
452 overall information about a hash table, such as the number of
453 entries it contains, the number of buckets in its hash array,
454 and the utilization of the buckets.
455 It is the caller's responsibility to free the result string
456 by passing it to \fBckfree\fR.
457 .PP
458 The header file \fBtcl.h\fR defines the actual data structures
459 used to implement hash tables.
460 This is necessary so that clients can allocate Tcl_HashTable
461 structures and so that macros can be used to read and write
462 the values of entries.
463 However, users of the hashing routines should never refer directly
464 to any of the fields of any of the hash-related data structures;
465 use the procedures and macros defined here.
466 .SH "THE TCL_HASHKEYTYPE STRUCTURE"
467 .PP
468 Extension writers can define new hash key types by defining four
469 procedures, initializing a Tcl_HashKeyType structure to describe
470 the type, and calling \fBTcl_InitCustomHashTable\fR.
471 The \fBTcl_HashKeyType\fR structure is defined as follows:
472 .CS
473 typedef 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
483 The \fIversion\fR member is the version of the table. If this
484 structure is extended in future then the version can be used
485 to distinguish between different structures. It should be set
486 to \fBTCL_HASH_KEY_TYPE_VERSION\fR.
487 .PP
488 The \fIflags\fR member is one or more of the following values OR'ed together:
489 .IP \fBTCL_HASH_KEY_RANDOMIZE_HASH\fR 25
490 There are some things, pointers for example which don't hash well 
491 because they do not use the lower bits. If this flag is set then the
492 hash table will attempt to rectify this by randomising the bits and 
493 then using the upper N bits as the index into the table.
494 .PP
495 The \fIhashKeyProc\fR member contains the address of a function 
496 called to calculate a hash value for the key.
497 .CS
498 typedef unsigned int (Tcl_HashKeyProc) (
499     Tcl_HashTable *\fItablePtr\fR,
500     VOID *\fIkeyPtr\fR);
501 .CE
502 If this is NULL then \fIkeyPtr\fR is used and 
503 \fBTCL_HASH_KEY_RANDOMIZE_HASH\fR is assumed.
504 .PP
505 The \fIcompareKeysProc\fR member contains the address of a function 
506 called to compare two keys.
507 .CS
508 typedef int (Tcl_CompareHashKeysProc) (VOID *\fIkeyPtr\fR,
509     Tcl_HashEntry *\fIhPtr\fR);
510 .CE
511 If this is NULL then the \fIkeyPtr\fR pointers are compared.
512 If the keys don't match then the function returns 0, otherwise
513 it returns 1.
514 .PP
515 The \fIallocEntryProc\fR member contains the address of a function 
516 called to allocate space for an entry and initialise the key.
517 .CS
518 typedef Tcl_HashEntry *(Tcl_AllocHashEntryProc) (
519     Tcl_HashTable *\fItablePtr\fR, VOID *\fIkeyPtr\fR);
520 .CE
521 If this is NULL then Tcl_Alloc is used to allocate enough space for a
522 Tcl_HashEntry and the key pointer is assigned to key.oneWordValue.
523 String keys and array keys use this function to allocate enough 
524 space for the entry and the key in one block, rather than doing
525 it in two blocks. This saves space for a pointer to the key from
526 the entry and another memory allocation. Tcl_Obj * keys use this 
527 function to allocate enough space for an entry and increment the 
528 reference count on the object.
529 If 
530 .PP
531 The \fIfreeEntryProc\fR member contains the address of a function 
532 called to free space for an entry.
533 .CS
534 typedef void (Tcl_FreeHashEntryProc) (Tcl_HashEntry *\fIhPtr\fR);
535 .CE
536 If this is NULL then Tcl_Free is used to free the space for the 
537 entry. Tcl_Obj * keys use this function to decrement the
538 reference count on the object.
539 .SH KEYWORDS
540 hash table, key, lookup, search, value