URL
https://opencores.org/ocsvn/or1k/or1k/trunk
Subversion Repositories or1k
[/] [or1k/] [trunk/] [insight/] [tcl/] [doc/] [Hash.3] - Rev 1767
Go to most recent revision | Compare with Previous | Blame | View Log
'\"'\" Copyright (c) 1989-1993 The Regents of the University of California.'\" Copyright (c) 1994-1996 Sun Microsystems, Inc.'\"'\" See the file "license.terms" for information on usage and redistribution'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.'\"'\" RCS: @(#) $Id: Hash.3,v 1.1.1.1 2002-01-16 10:25:24 markom Exp $'\".so man.macros.TH Tcl_Hash 3 "" Tcl "Tcl Library Procedures".BS.SH NAMETcl_InitHashTable, 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.SH SYNOPSIS.nf\fB#include <tcl.h>\fR.sp\fBTcl_InitHashTable\fR(\fItablePtr, keyType\fR).sp\fBTcl_DeleteHashTable\fR(\fItablePtr\fR).spTcl_HashEntry *\fBTcl_CreateHashEntry\fR(\fItablePtr, key, newPtr\fR).sp\fBTcl_DeleteHashEntry\fR(\fIentryPtr\fR).spTcl_HashEntry *\fBTcl_FindHashEntry\fR(\fItablePtr, key\fR).spClientData\fBTcl_GetHashValue\fR(\fIentryPtr\fR).sp\fBTcl_SetHashValue\fR(\fIentryPtr, value\fR).spchar *\fBTcl_GetHashKey\fR(\fItablePtr, entryPtr\fR).spTcl_HashEntry *\fBTcl_FirstHashEntry\fR(\fItablePtr, searchPtr\fR).spTcl_HashEntry *\fBTcl_NextHashEntry\fR(\fIsearchPtr\fR).spchar *\fBTcl_HashStats\fR(\fItablePtr\fR).SH ARGUMENTS.AS Tcl_HashSearch *searchPtr.AP Tcl_HashTable *tablePtr inAddress of hash table structure (for all procedures but\fBTcl_InitHashTable\fR, this must have been initialized byprevious call to \fBTcl_InitHashTable\fR)..AP int keyType inKind of keys to use for new hash table. Must be eitherTCL_STRING_KEYS, TCL_ONE_WORD_KEYS, or an integer valuegreater than 1..AP char *key inKey to use for probe into table. Exact form depends on\fIkeyType\fR used to create table..AP int *newPtr outThe word at \fI*newPtr\fR is set to 1 if a new entry was createdand 0 if there was already an entry for \fIkey\fR..AP Tcl_HashEntry *entryPtr inPointer to hash table entry..AP ClientData value inNew value to assign to hash table entry. Need not have typeClientData, but must fit in same space as ClientData..AP Tcl_HashSearch *searchPtr inPointer to record to use to keep track of progress in enumeratingall the entries in a hash table..BE.SH DESCRIPTION.PPA hash table consists of zero or more entries, each consisting ofa key and a value.Given the key for an entry, the hashing routines can very quicklylocate the entry, and hence its value.There may be at most one entry in a hash table with aparticular key, but many entries may have the same value.Keys can take one of three forms: strings,one-word values, or integer arrays.All of the keys in a given table have the same form, which isspecified when the table is initialized..PPThe value of a hash table entry can be anything that fits inthe same space as a ``char *'' pointer.Values for hash table entries are managed entirely by clients,not by the hash module itself.Typically each entry's value is a pointer to a data structuremanaged by client code..PPHash tables grow gracefully as the number of entries increases,so that there are always less than three entries per hash bucket,on average.This allows for fast lookups regardless of the number of entriesin a table..PP\fBTcl_InitHashTable\fR initializes a structure that describesa new hash table.The space for the structure is provided by the caller, not bythe hash module.The value of \fIkeyType\fR indicates what kinds of keys willbe used for all entries in the table. \fIKeyType\fR must haveone of the following values:.IP \fBTCL_STRING_KEYS\fR 25Keys are null-terminated ASCII strings.They are passed to hashing routines using the address of thefirst character of the string..IP \fBTCL_ONE_WORD_KEYS\fR 25Keys are single-word values; they are passed to hashing routinesand stored in hash table entries as ``char *'' values.The pointer value is the key; it need not (and usually doesn't)actually point to a string..IP \fIother\fR 25If \fIkeyType\fR is not TCL_STRING_KEYS or TCL_ONE_WORD_KEYS,then it must be an integer value greater than 1.In this case the keys will be arrays of ``int'' values, where\fIkeyType\fR gives the number of ints in each key.This allows structures to be used as keys.All keys must have the same size.Array keys are passed into hashing functions using the addressof the first int in the array..PP\fBTcl_DeleteHashTable\fR deletes all of the entries in a hashtable and frees up the memory associated with the table'sbucket array and entries.It does not free the actual table structure (pointed toby \fItablePtr\fR), since that memory is assumed to be managedby the client.\fBTcl_DeleteHashTable\fR also does not free or otherwisemanipulate the values of the hash table entries.If the entry values point to dynamically-allocated memory, thenit is the client's responsibility to free these structuresbefore deleting the table..PP\fBTcl_CreateHashEntry\fR locates the entry corresponding to aparticular key, creating a new entry in the table if therewasn't already one with the given key.If an entry already existed with the given key then \fI*newPtr\fRis set to zero.If a new entry was created, then \fI*newPtr\fR is set to a non-zerovalue and the value of the new entry will be set to zero.The return value from \fBTcl_CreateHashEntry\fR is a pointer tothe entry, which may be used to retrieve and modify the entry'svalue or to delete the entry from the table..PP\fBTcl_DeleteHashEntry\fR will remove an existing entry from atable.The memory associated with the entry itself will be freed, butthe client is responsible for any cleanup associated with theentry's value, such as freeing a structure that it points to..PP\fBTcl_FindHashEntry\fR is similar to \fBTcl_CreateHashEntry\fRexcept that it doesn't create a new entry if the key doesn't exist;instead, it returns NULL as result..PP\fBTcl_GetHashValue\fR and \fBTcl_SetHashValue\fR are used toread and write an entry's value, respectively.Values are stored and retrieved as type ``ClientData'', which islarge enough to hold a pointer value. On almost all machines this islarge enough to hold an integer value too..PP\fBTcl_GetHashKey\fR returns the key for a given hash table entry,either as a pointer to a string, a one-word (``char *'') key, oras a pointer to the first word of an array of integers, dependingon the \fIkeyType\fR used to create a hash table.In all cases \fBTcl_GetHashKey\fR returns a result with type``char *''.When the key is a string or array, the result of \fBTcl_GetHashKey\fRpoints to information in the table entry; this information willremain valid until the entry is deleted or its table is deleted..PP\fBTcl_FirstHashEntry\fR and \fBTcl_NextHashEntry\fR may be usedto scan all of the entries in a hash table.A structure of type ``Tcl_HashSearch'', provided by the client,is used to keep track of progress through the table.\fBTcl_FirstHashEntry\fR initializes the search record andreturns the first entry in the table (or NULL if the table isempty).Each subsequent call to \fBTcl_NextHashEntry\fR returns thenext entry in the table orNULL if the end of the table has been reached.A call to \fBTcl_FirstHashEntry\fR followed by calls to\fBTcl_NextHashEntry\fR will return each of the entries inthe table exactly once, in an arbitrary order.It is unadvisable to modify the structure of the table, e.g.by creating or deleting entries, while the search is inprogress..PP\fBTcl_HashStats\fR returns a dynamically-allocated string withoverall information about a hash table, such as the number ofentries it contains, the number of buckets in its hash array,and the utilization of the buckets.It is the caller's responsibility to free the result stringby passing it to \fBfree\fR..PPThe header file \fBtcl.h\fR defines the actual data structuresused to implement hash tables.This is necessary so that clients can allocate Tcl_HashTablestructures and so that macros can be used to read and writethe values of entries.However, users of the hashing routines should never refer directlyto any of the fields of any of the hash-related data structures;use the procedures and macros defined here..SH KEYWORDShash table, key, lookup, search, value
Go to most recent revision | Compare with Previous | Blame | View Log
