Unix/Linux Go Back    


OpenDarwin 7.2.1 - man page for tcl_hashstats (opendarwin section 3)

Linux & Unix Commands - Search Man Pages
Man Page or Keyword Search:   man
Select Man Page Set:       apropos Keyword Search (sections above)


Tcl_Hash(3)			      Tcl Library Procedures			      Tcl_Hash(3)

_________________________________________________________________________________________________

NAME
       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

SYNOPSIS
       #include <tcl.h>

       Tcl_InitHashTable(tablePtr, keyType)

       Tcl_InitCustomHashTable(tablePtr, keyType, typePtr)

       Tcl_InitObjHashTable(tablePtr)

       Tcl_DeleteHashTable(tablePtr)

       Tcl_HashEntry *
       Tcl_CreateHashEntry(tablePtr, key, newPtr)

       Tcl_DeleteHashEntry(entryPtr)

       Tcl_HashEntry *
       Tcl_FindHashEntry(tablePtr, key)

       ClientData
       Tcl_GetHashValue(entryPtr)

       Tcl_SetHashValue(entryPtr, value)

       char *
       Tcl_GetHashKey(tablePtr, entryPtr)

       Tcl_HashEntry *
       Tcl_FirstHashEntry(tablePtr, searchPtr)

       Tcl_HashEntry *
       Tcl_NextHashEntry(searchPtr)

       CONST char *
       Tcl_HashStats(tablePtr)

ARGUMENTS
       Tcl_HashTable	*tablePtr    (in)      Address of hash table structure	(for  all  proce-
					       dures  but  Tcl_InitHashTable, this must have been
					       initialized     by      previous      call      to
					       Tcl_InitHashTable).

       int		keyType      (in)      Kind  of  keys to use for new hash table.  Must be
					       either	  TCL_STRING_KEYS,     TCL_ONE_WORD_KEYS,
					       TCL_CUSTOM_TYPE_KEYS,  TCL_CUSTOM_PTR_KEYS,  or an
					       integer value greater than 1.

       Tcl_HashKeyType	*typePtr     (in)      Address of structure which defines  the	behaviour
					       of the hash table.

       CONST char	*key	     (in)      Key  to	use  for  probe  into  table.  Exact form
					       depends on keyType used to create table.

       int		*newPtr      (out)     The word at *newPtr is set to 1 if a new entry was
					       created	and  0	if there was already an entry for
					       key.

       Tcl_HashEntry	*entryPtr    (in)      Pointer to hash table entry.

       ClientData	value	     (in)      New value to assign to hash table entry.  Need not
					       have  type  ClientData, but must fit in same space
					       as ClientData.

       Tcl_HashSearch	*searchPtr   (in)      Pointer to record to use to keep track of progress
					       in enumerating all the entries in a hash table.
_________________________________________________________________

DESCRIPTION
       A  hash	table  consists  of  zero  or more entries, each consisting of a key and a value.
       Given the key for an entry, the hashing routines can very quickly locate  the  entry,  and
       hence its value. There may be at most one entry in a hash table with a particular key, but
       many entries may have the same value.  Keys can take one of four forms: strings,  one-word
       values, integer arrays, or custom keys defined by a Tcl_HashKeyType structure (See section
       THE TCL_HASHKEYTYPE STRUCTURE below). All of the keys in a given table have the same form,
       which is specified when the table is initialized.

       The  value  of  a hash table entry can be anything that fits in the 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 structure managed
       by client code.

       Hash 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 regard-
       less of the number of entries in a table.

       The  core  provides   three   functions	 for   the   initialization   of   hash   tables,
       Tcl_InitHashTable, Tcl_InitObjHashTable and Tcl_InitCustomHashTable.

       Tcl_InitHashTable  initializes a structure that describes a new hash table.  The space for
       the structure is provided by the caller, not by the hash module.   The  value  of  keyType
       indicates  what	kinds  of  keys will be used for all entries in the table. All of the key
       types described later are allowed, with the exception of TCL_CUSTOM_TYPE_KEYS and TCL_CUS-
       TOM_PTR_KEYS.

       Tcl_InitObjHashTable  is  a  wrapper around Tcl_InitCustomHashTable and initializes a hash
       table whose keys are Tcl_Obj *.

       Tcl_InitCustomHashTable initializes a structure that describes a new hash table. The space
       for the structure is provided by the caller, not by the hash module.  The value of keyType
       indicates what kinds of keys will be used for all entries in the table.	KeyType must have
       one of the following values:

       TCL_STRING_KEYS		Keys  are  null-terminated  strings.   They are passed to hashing
				routines using the address of the first character of the string.

       TCL_ONE_WORD_KEYS	Keys are single-word values;  they are passed to hashing routines
				and  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.

       TCL_CUSTOM_TYPE_KEYS	Keys  are of arbitrary type, and are stored in the entry. Hashing
				and comparison is  determined  by  typePtr.  The  Tcl_HashKeyType
				structure  is described in the section THE TCL_HASHKEYTYPE STRUC-
				TURE below.

       TCL_CUSTOM_PTR_KEYS	Keys are pointers to an arbitrary type, and  are  stored  in  the
				entry.	Hashing  and  comparison  is  determined  by typePtr. The
				Tcl_HashKeyType  structure  is	described  in  the  section   THE
				TCL_HASHKEYTYPE STRUCTURE below.

       other			If  keyType  is  not one of the above, then it must be an integer
				value greater than 1.  In this case the keys will  be  arrays  of
				``int''  values,  where  keyType 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 address of the first int in the array.

       Tcl_DeleteHashTable deletes all of the entries in a hash table and  frees  up  the  memory
       associated  with  the table's bucket array and entries.	It does not free the actual table
       structure (pointed to by tablePtr), since that memory is assumed  to  be  managed  by  the
       client.	 Tcl_DeleteHashTable also does not free or otherwise manipulate the values of the
       hash table entries.  If the entry values point to dynamically-allocated memory, then it is
       the client's responsibility to free these structures before deleting the table.

       Tcl_CreateHashEntry  locates  the  entry corresponding to a particular key, creating a new
       entry in the table if there wasn't already one with the given key.  If  an  entry  already
       existed	with the given key then *newPtr is set to zero.  If a new entry was created, then
       *newPtr is set to a non-zero value and the value of the new entry will  be  set	to  zero.
       The  return value from Tcl_CreateHashEntry is a pointer to the entry, which may be used to
       retrieve and modify the entry's value or to delete the entry from the table.

       Tcl_DeleteHashEntry will remove an existing entry from a  table.   The  memory  associated
       with the entry itself will be freed, but the client is responsible for any cleanup associ-
       ated with the entry's value, such as freeing a structure that it points to.

       Tcl_FindHashEntry is similar to Tcl_CreateHashEntry except that it doesn't  create  a  new
       entry if the key doesn't exist; instead, it returns NULL as result.

       Tcl_GetHashValue and Tcl_SetHashValue are used to read and write an entry's value, respec-
       tively.	Values are stored and retrieved as type ``ClientData'', which is large enough  to
       hold  a	pointer  value.   On  almost all machines this is large enough to hold an integer
       value too.

       Tcl_GetHashKey returns the key for a given hash table entry, either  as	a  pointer  to	a
       string,	a  one-word  (``char  *'')  key, or as a pointer to the first word of an array of
       integers, depending on the keyType used to create a hash table.	In  all  cases	Tcl_GetH-
       ashKey  returns	a  result  with  type ``char *''.  When the key is a string or array, the
       result of Tcl_GetHashKey points to information in the table entry;  this information  will
       remain valid until the entry is deleted or its table is deleted.

       Tcl_FirstHashEntry  and Tcl_NextHashEntry may be used to 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.  Tcl_FirstHashEntry initializes the search record and
       returns the first entry in the table (or NULL if the table  is  empty).	 Each  subsequent
       call  to  Tcl_NextHashEntry  returns the next entry in the table or NULL if the end of the
       table has been reached.	A call to Tcl_FirstHashEntry followed by calls to Tcl_NextHashEn-
       try  will return each of the entries in the 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 in progress.

       Tcl_HashStats returns a dynamically-allocated string with overall information about a hash
       table, such as the number of entries 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
       string by passing it to ckfree.

       The header file tcl.h defines the actual data structures used to  implement  hash  tables.
       This is necessary so that clients can allocate Tcl_HashTable structures and so that macros
       can be used to read and write the values of entries.  However, users of the  hashing  rou-
       tines  should  never  refer  directly to any of the fields of any of the hash-related data
       structures; use the procedures and macros defined here.

THE TCL_HASHKEYTYPE STRUCTURE
       Extension writers can define new hash key types by defining four procedures,  initializing
       a  Tcl_HashKeyType  structure  to  describe the type, and calling Tcl_InitCustomHashTable.
       The Tcl_HashKeyType structure is defined as follows:
	      typedef struct Tcl_HashKeyType {
		  int version;
		  int flags;
		  Tcl_HashKeyProc *hashKeyProc;
		  Tcl_CompareHashKeysProc *compareKeysProc;
		  Tcl_AllocHashEntryProc *allocEntryProc;
		  Tcl_FreeHashEntryProc *freeEntryProc;
	      } Tcl_HashKeyType;

       The version member is the version of the table. If this structure is  extended  in  future
       then the version can be used to distinguish between different structures. It should be set
       to TCL_HASH_KEY_TYPE_VERSION.

       The flags member is one or more of the following values OR'ed together:

       TCL_HASH_KEY_RANDOMIZE_HASH
				There are some things, pointers for example which don't hash well
				because  they do not use the lower bits. If this flag is set then
				the hash table will attempt to rectify this  by  randomising  the
				bits and then using the upper N bits as the index into the table.

       The hashKeyProc member contains the address of a function called to calculate a hash value
       for the key.
	      typedef unsigned int (Tcl_HashKeyProc) (
		  Tcl_HashTable *tablePtr,
		  VOID *keyPtr);
       If this is NULL then keyPtr is used and TCL_HASH_KEY_RANDOMIZE_HASH is assumed.

       The compareKeysProc member contains the address of a function called to compare two keys.
	      typedef int (Tcl_CompareHashKeysProc) (VOID *keyPtr,
		  Tcl_HashEntry *hPtr);
       If this is NULL then the keyPtr pointers are compared.  If the keys don't match	then  the
       function returns 0, otherwise it returns 1.

       The  allocEntryProc member contains the address of a function called to allocate space for
       an entry and initialise the key.
	      typedef Tcl_HashEntry *(Tcl_AllocHashEntryProc) (
		  Tcl_HashTable *tablePtr, VOID *keyPtr);
       If this is NULL then Tcl_Alloc is used to allocate enough space for  a  Tcl_HashEntry  and
       the  key  pointer  is  assigned	to key.oneWordValue.  String keys and array keys use this
       function to allocate enough space for the entry and the key  in	one  block,  rather  than
       doing  it  in  two  blocks.  This  saves space for a pointer to the key from the entry and
       another memory allocation. Tcl_Obj * keys use this function to allocate enough  space  for
       an entry and increment the reference count on the object.  If

       The  freeEntryProc  member  contains the address of a function called to free space for an
       entry.
	      typedef void (Tcl_FreeHashEntryProc) (Tcl_HashEntry *hPtr);
       If this is NULL then Tcl_Free is used to free the space for the entry. Tcl_Obj * keys  use
       this function to decrement the reference count on the object.

KEYWORDS
       hash table, key, lookup, search, value

Tcl										      Tcl_Hash(3)
Unix & Linux Commands & Man Pages : ©2000 - 2018 Unix and Linux Forums


All times are GMT -4. The time now is 06:13 AM.