## Tcl9.0.3/Tk9.0.3 Documentation > Tcl C API > Hash

### Tcl/Tk Applications | Tcl Commands | Tk Commands | [incr Tcl] Package Commands | SQLite3 Package Commands | TDBC Package Commands | tdbc::mysql Package Commands | tdbc::odbc Package Commands | tdbc::postgres Package Commands | tdbc::sqlite3 Package Commands | Thread Package Commands | Tcl C API | Tk C API | [incr Tcl] Package C API | TDBC Package C API

  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)
    void *
    Tcl_GetHashValue(entryPtr)
    Tcl_SetHashValue(entryPtr, value)
    void *
    Tcl_GetHashKey(tablePtr, entryPtr)
    Tcl_HashEntry *
    Tcl_FirstHashEntry(tablePtr, searchPtr)
    Tcl_HashEntry *
    Tcl_NextHashEntry(searchPtr)
    char *
    Tcl_HashStats(tablePtr)
  引数 ARGUMENTS
    Tcl_HashTable *tablePtr (入力in)
    int keyType (入力in)
    Tcl_HashKeyType *typePtr (入力in)
    const void *key (入力in)
    int *newPtr (出力out)
    Tcl_HashEntry *entryPtr (入力in)
    void *value (入力in)
    Tcl_HashSearch *searchPtr (入力in)
  説明 DESCRIPTION
    TCL_STRING_KEYS
    TCL_ONE_WORD_KEYS
    TCL_CUSTOM_TYPE_KEYS
    TCL_CUSTOM_PTR_KEYS
    other
  THE TCL_HASHKEYTYPE STRUCTURE
    TCL_HASH_KEY_RANDOMIZE_HASH
    TCL_HASH_KEY_SYSTEM_HASH
  REFERENCE COUNT MANAGEMENT
  SEE ALSO
  KEYWORDS

### 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)
void *
Tcl_GetHashValue(entryPtr)
Tcl_SetHashValue(entryPtr, value)
void *
Tcl_GetHashKey(tablePtr, entryPtr)
Tcl_HashEntry *
Tcl_FirstHashEntry(tablePtr, searchPtr)
Tcl_HashEntry *
Tcl_NextHashEntry(searchPtr)
char *
Tcl_HashStats(tablePtr)

### 引数 ARGUMENTS

Tcl_HashTable *tablePtr (入力in)
  連想記憶表の構造の番地( Tcl_InitHashTable を除く全ての手続函数､これは事前の Tcl_InitHashTable への呼出しによって初期化されなければならない)｡　　 Address of hash table structure (for all procedures but Tcl_InitHashTable, this must have been initialized by previous call to Tcl_InitHashTable).

int keyType (入力in)
  新しい連想記憶表の為に使う鍵の種類｡ TCL_STRING_KEYSR か TCL_ONE_WORD_KEYS か TCL_CUSTOM_TYPE_KEYS か TCL_CUSTOM_PTR_KEYS の内の一つ或いは 1 より大きい整数､のどれかでなければならない｡　 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 behavior of the hash table.

const void *key (入力in)
  表の中への探り棒の為に使用する鍵｡ Key to use for probe into table. Exact form depends on keyType used to create table.

int *newPtr (出力out)
  もし新しい項目が生成され､且つ 0 の場合､既に鍵 key.の項目があれば､ *newPtr に於ける単語は 1 に設定される｡　 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.

void *value (入力in)
  連想記憶表項目に割当てる新しい値｡　 New value to assign to hash table entry.

Tcl_HashSearch *searchPtr (入力in)
  連想記憶表内の全ての項目を列挙する進歩の奇跡を保つ為に使用する記録への指示子｡　 Pointer to record to use to keep track of progress in enumerating all the entries in a hash table.

### 説明 DESCRIPTION

連想記憶表は零或はそれ以上の見出しから構成されそれぞれは鍵と値から構成される｡見出しに鍵が与えられ､連想経路が速やかに見出しの位置を定め､そして値になる｡特定の鍵に高々一つの見出しがあるかもしれないが､多くの見出しが同じ値を持ち得る｡鍵は４つの形式の内の一つを有する: 文字列､１語の値､整数配列､ Tcl_HashKeyType 構造により定義された誂えの鍵(下の THE TCL_HASHKEYTYPE STRUCTURE 節を参照されたい)｡与えられた表の中の鍵は同じ形式を有する､それは表が初期化されるときに指定される｡ 　　　　 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.

連想記憶表の値は “char *” ポインターの中に入るどのようなものでもよい｡連想記憶表の値は依頼者によって全て管理され､連想記憶機能自身に管理されていない｡典型的には､見出しの値は依頼側の符号により管理されたデータ構造へのポインターである｡ 　　　 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 regardless of the number of entries in a table.

中核は連想記憶表の初期化の為に三つの函数を提供する､ Tcl_InitHashTable と Tcl_InitObjHashTable と Tcl_InitCustomHashTable である｡ 　　　 The core provides three functions for the initialization of hash tables, Tcl_InitHashTable, Tcl_InitObjHashTable and Tcl_InitCustomHashTable.

Tcl_InitHashTable は新しい連想記憶表を記述する構造を初期化する｡構造の空間は呼出し側によって提供され､連想記憶機能にはよらない｡ keyType の値はどの種類の鍵が表内の全ての見出しに使われているかを指し示す｡ TCL_CUSTOM_TYPE_KEYS と TCL_CUSTOM_PTR_KEYS を除いて､記述された全ての鍵型が後に許容される｡ 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_CUSTOM_PTR_KEYS.

Tcl_InitObjHashTable は Tcl_InitCustomHashTable の周りを包み込み､鍵が Tcl_Obj * の連想記憶表を初期化する｡ Tcl_InitObjHashTable is a wrapper around Tcl_InitCustomHashTable and initializes a hash table whose keys are Tcl_Obj *.

Tcl_InitCustomHashTable は新しい連想記憶表を記述する構造を初期化する｡構造の為の空間は呼出し側に提供され､連想記憶機能によってではない｡ keyType の値は表内の全ての見出しにどの種類の鍵が使われるかを指し示す｡ KeyType は次の値の一つを有さなければならない｡ 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
  鍵は１語値であり;それは連想機能譜に渡され､連想記憶表見出しに “char *” 値として保存される｡ポインターの値が鍵である; それは実際は文字列を指す必要はない(普通は指さない)｡ 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 does not) actually point to a string.

TCL_CUSTOM_TYPE_KEYS
  鍵は任意の型であり､見出しの中に保存される｡連想化と比較は決定は typePtr により定められる｡ Tcl_HashKeyType 構造は下の THE TCL_HASHKEYTYPE STRUCTURE の節に記述されている｡ 　　　 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 STRUCTURE below.

TCL_CUSTOM_PTR_KEYS
  鍵は任意の型へのポインターである｡連想化と比較は決定は typePtr により定められる｡ Tcl_HashKeyType 構造は下の THE TCL_HASHKEYTYPE STRUCTURE の節に記述されている｡ 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
  もし鍵型 keyType が上の内の一つでない場合､それは 1 より大きい整数値でなければならない｡この場合､鍵は整数の配列なる､そこでは鍵の型は夫々の鍵の整数の値を与える｡これは構造が鍵であることを許容する｡全ての鍵は同じ寸法でなければならない｡配列鍵は配列内の最初の番地を使って､連想記憶函数に渡される｡ 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 は連想記憶表内の全ての見出しを削除し､表の容器と見出しに結合された記憶域迄解放する｡それは実際の表構造は解放しない( tablePtr によって指される)､理由は､記憶域は依頼者によって管理されていると仮定されているから｡ Tcl_DeleteHashTable は連想記憶表内の見出しの値の操作以外を解放はしない｡もし､全ての値が動的に割付けた記憶を指示する場合､それは表を削除する前に構造を解除することは依頼側の責務である｡ 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 は特定の鍵に相当する見出しを配置する､もし与えられた鍵に見出しがない場合､新しい見出しく作成する｡もし与えられた鍵に既に見出しが実在する場合 *newPtr は零に設定される｡もし新しい見出しが作成されると､*newPtr は非零値が設定され､新しい見出しの値は零に設定される｡ Tcl_CreateHashEntry から返った値が見出しへのポインターであると､それは見出しの値の取り出し､修正又は表からの見出しの削除に使われる｡ Tcl_CreateHashEntry locates the entry corresponding to a particular key, creating a new entry in the table if there was not 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 は表から既存の見出しを取除く｡見出し自身に結合した記憶は解放されるが､其れが指している構造の様な､見出しの値に結合したものの清浄は呼出し側の責務である｡ 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 associated with the entry's value, such as freeing a structure that it points to.

Tcl_FindHashEntry は Tcl_CreateHashEntry と似ているが前者は鍵が実在しない場合に新しい見出しを作成する; これは代りに結果として NULL を返す｡ Tcl_FindHashEntry is similar to Tcl_CreateHashEntry except that it does not create a new entry if the key doesn't exist; instead, it returns NULL as result.

Tcl_GetHashValue と Tcl_SetHashValue は夫々､見出しの値の読み書きに使われる｡ Tcl_GetHashValue and Tcl_SetHashValue are used to read and write an entry's value, respectively.

Tcl_GetHashKey は与えられた連想記憶表見出しの為の鍵を返す､文字列へのポインターとしてか､１語鍵( (“char *”) )か､整数配列の最初の語へのポインターとしてかは､連想記憶表の作詞得に使われた keyType に依存する｡全ての場合に Tcl_GetHashKey は結果として型 “char *”. を返す｡鍵が文字列か配列の場合､ Tcl_GetHashKey の結果は表見出しの情報を指示する; この情報は見出しが消去されるか表が消去されるまで有効に残る｡ 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_GetHashKey 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 と Tcl_NextHashEntry は連想記憶表内の全ての見出しの走査に使用される｡依頼側より提供される “Tcl_HashSearch”, 型の構造は表を通して追跡手順を保有する為に使われる｡ Tcl_FirstHashEntry は捜索記録を初期化し表の最初の見出しを返す(又は表が空の場合は NULL )｡それぞれの引続く Tcl_NextHashEntry 呼出しは表の次の見出しか､表の末尾に到達した場合は NULL を返す｡ Tcl_FirstHashEntry 呼出しに続く Tcl_NextHashEntry 呼出は表の中の夫々の見出しを任意の順序で､厳密に１度返す｡譬えば､見出しを作成する又は削除することにより､捜索が進行している間､ Tcl_FirstHashEntry か Tcl_NextHashEntry により返された見出しの削除の例外を伴う､表の構造の修正は推奨されない｡ 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_NextHashEntry will return each of the entries in the table exactly once, in an arbitrary order. It is inadvisable to modify the structure of the table, e.g. by creating or deleting entries, while the search is in progress, with the exception of deleting the entry returned by Tcl_FirstHashEntry or Tcl_NextHashEntry.

Tcl_HashStats は含んでいる見出しの数や連想記憶内の容器の数の様な連想記憶表に関する全体の情報を伴う動的に割付けられた文字列を返す｡それを Tcl_Free に渡すことにより結果の文字列の解放は呼出し側の責務である｡ 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 Tcl_Free.

冒頭ファイル tcl.h は連想記憶の実装に使われた実際のデータ構造を定義する｡これは必要であり､依頼側は連想記憶表構造を割付けて､マクロにより見出しの値を読み書きに使用可能にする｡しかし連想機能譜の使用者はどの連想関連データ構想のどの欄も直接参照すべきではない; 手続函数かここで定義したマクロを使われたい｡ 　　　 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 routines 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

拡張機能の著者は４つの手続函数の定義､型を記述する Tcl_HashKeyType 構造の初期化､ Tcl_InitCustomHashTable の呼出し､により新しい鍵型を定義できる｡ Tcl_HashKeyType 構造は次の様に定義される: 　　　 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 {
        int version;
        int flags;
        Tcl_HashKeyProc *hashKeyProc;
        Tcl_CompareHashKeysProc *compareKeysProc;
        Tcl_AllocHashEntryProc *allocEntryProc;
        Tcl_FreeHashEntryProc *freeEntryProc;
    } Tcl_HashKeyType;

要員の version は表の版番号である｡もし構造が将来拡張される場合､版番号は異なる構造間を区別する為に使用できる｡それは TCL_HASH_KEY_TYPE_VERSION に設定すべきである｡ 　　　 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.

要員の flags は次の内の零又はそれ以上の値の､論理的或は､を一緒にする: 　　　 The flags member is 0 or one or more of the following values OR'ed together:

TCL_HASH_KEY_RANDOMIZE_HASH
  ポインターに何か問題があり､譬えば下ビットを使わない為に充分に連想できないとか｡もしこの旗印が設定されると､連想記憶表はビットを無作為化し上 N ビットを表の索引として使うことにより､それを糾すことを試みる｡ 　　　 There are some things, pointers for example which do not 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 randomizing the bits and then using the upper N bits as the index into the table.

TCL_HASH_KEY_SYSTEM_HASH
  この旗印は Tcl に対して､連想記憶表データ構造を保存する為に使われる記憶域の割付と解除をする時にOSによってされる限り記憶域割付手続函数の使用を強制し､どのTcl's が所有する誂えた記憶域割付機能譜も使わない｡これは､もし何か､相互依存を避けるために､連想記憶表が割付け機能譜の誂えた実装を使用する場合､或は何か割付機能譜に依存する誂えたものを使う場合は重要である｡ 　　　 This flag forces Tcl to use the memory allocation procedures provided by the operating system when allocating and freeing memory used to store the hash table data structures, and not any of Tcl's own customized memory allocation routines. This is important if the hash table is to be used in the implementation of a custom set of allocation routines, or something that a custom set of allocation routines might depend on, in order to avoid any circular dependency.

要員の hashKeyProc は鍵に対する連想記憶値を計算する為に呼ばれる函数の番地を含む｡ The hashKeyProc member contains the address of a function called to calculate a hash value for the key.

    typedef TCL_HASH_TYPE Tcl_HashKeyProc(
            Tcl_HashTable *tablePtr,
            void *keyPtr);

もしこれが NULL の場合 keyPtr が使われ､ TCL_HASH_KEY_RANDOMIZE_HASH が仮定される｡ 　　　 If this is NULL then keyPtr is used and TCL_HASH_KEY_RANDOMIZE_HASH is assumed.

要員の compareKeysProc は二つの鍵を比較する為に呼出される函数の番地を含む｡ 　　　　 The compareKeysProc member contains the address of a function called to compare two keys.

    typedef int Tcl_CompareHashKeysProc(
            void *keyPtr,
            Tcl_HashEntry *hPtr);

もしこれが NULL の場合 keyPtr が比較される｡もし鍵が合致しない場合､函数は 0 を返しそれ以外は 1.を返す｡ If this is NULL then the keyPtr pointers are compared. If the keys do not match then the function returns 0, otherwise it returns 1.

要員の allocEntryProc は見出しに関する空間の割付と鍵と依頼側データの初期化の為に呼出す函数の番地を含む｡ The allocEntryProc member contains the address of a function called to allocate space for an entry and initialize the key and clientData.

    typedef Tcl_HashEntry *Tcl_AllocHashEntryProc(
            Tcl_HashTable *tablePtr,
            void *keyPtr);

もしこれが NULL の場合 Tcl_Alloc が連想記憶見出しに充分な余地を割付ける為に使われる､鍵ポインターは１語値鍵に代入され､呼出し側データは NULL に設定される｡文字列鍵と配列鍵は､二つの区画内ではなく､１区画内に見出しと鍵に充分な余地を割付けるためにこの函数を使う｡これにより見出しからの鍵へのポインターのための空間と他の記憶割付けの為に空間を節約できる｡Tcl_Obj* 鍵はこの函数を見出しに充分な空間を割当て､値の参照計数の増加に使う｡ If this is NULL then Tcl_Alloc is used to allocate enough space for a Tcl_HashEntry, the key pointer is assigned to key.oneWordValue and the clientData is set to NULL. 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 value.

要員の freeEntryProc は見出しの為の空間の開放の為に呼出す函数の番地を含む｡ 　　　　 The freeEntryProc member contains the address of a function called to free space for an entry.

    typedef void Tcl_FreeHashEntryProc(
            Tcl_HashEntry *hPtr);

もしこれが NULL の場合 Tcl_Free が見出しの為の空間の開放の為に呼出される｡Tcl_Obj* 鍵はこの函数を値の参照計数の減少に使う｡ 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 value.

### REFERENCE COUNT MANAGEMENT

Tcl_InitCustomHashTableでハッシュ表が生成された時､Tcl_CreateHashEntry函数は､鍵が生成される時､そのkey引数の参照回数を増加する事になる(但し､既存の整合鍵はない場合)｡鍵の参照回数は､対応するハッシュ見出しが削除された時､鍵の参照回数は減じられる｡ 鍵の参照回数は､対応するハッシュ見出しが削除される時に､Tcl_DeleteHashEntryかTcl_DeleteHashTableかの孰れかと共に､減少される｡ Tcl_GetHashKey函数は､その参照回数の更なる修正なしに､鍵を返す｡ When a hash table is created with Tcl_InitCustomHashTable, the Tcl_CreateHashEntry function will increment the reference count of its key argument when it creates a key (but not if there is an existing matching key). The reference count of the key will be decremented when the corresponding hash entry is deleted, whether with Tcl_DeleteHashEntry or with Tcl_DeleteHashTable. The Tcl_GetHashKey function will return the key without further modifying its reference count.

Tcl_Obj*を鍵として使う特注のハッシュ表は､一般に､そのallocEntryProc内に何か似ている事をするする必要がある｡ Custom hash tables that use a Tcl_Obj* as key will generally need to do something similar in their allocEntryProc.

### SEE ALSO

Dict

### KEYWORDS

hash table, key, lookup, search, value
Copyright © 1989-1993 The Regents of the University of California.
Copyright © 1994-1996 Sun Microsystems, Inc.