Lines Matching refs:tablePtr

34 #define RANDOM_INDEX(tablePtr, i) \
35 (((((long) (i))*1103515245) >> (tablePtr)->downShift) & (tablePtr)->mask)
41 static Tcl_HashEntry * ArrayFind _ANSI_ARGS_((Tcl_HashTable *tablePtr,
43 static Tcl_HashEntry * ArrayCreate _ANSI_ARGS_((Tcl_HashTable *tablePtr,
45 static Tcl_HashEntry * BogusFind _ANSI_ARGS_((Tcl_HashTable *tablePtr,
47 static Tcl_HashEntry * BogusCreate _ANSI_ARGS_((Tcl_HashTable *tablePtr,
50 static void RebuildTable _ANSI_ARGS_((Tcl_HashTable *tablePtr));
51 static Tcl_HashEntry * StringFind _ANSI_ARGS_((Tcl_HashTable *tablePtr,
53 static Tcl_HashEntry * StringCreate _ANSI_ARGS_((Tcl_HashTable *tablePtr,
55 static Tcl_HashEntry * OneWordFind _ANSI_ARGS_((Tcl_HashTable *tablePtr,
57 static Tcl_HashEntry * OneWordCreate _ANSI_ARGS_((Tcl_HashTable *tablePtr,
80 Tcl_InitHashTable(tablePtr, keyType)
81 register Tcl_HashTable *tablePtr; /* Pointer to table record, which
87 tablePtr->buckets = tablePtr->staticBuckets;
88 tablePtr->staticBuckets[0] = tablePtr->staticBuckets[1] = 0;
89 tablePtr->staticBuckets[2] = tablePtr->staticBuckets[3] = 0;
90 tablePtr->numBuckets = TCL_SMALL_HASH_TABLE;
91 tablePtr->numEntries = 0;
92 tablePtr->rebuildSize = TCL_SMALL_HASH_TABLE*REBUILD_MULTIPLIER;
93 tablePtr->downShift = 28;
94 tablePtr->mask = 3;
95 tablePtr->keyType = keyType;
97 tablePtr->findProc = StringFind;
98 tablePtr->createProc = StringCreate;
100 tablePtr->findProc = OneWordFind;
101 tablePtr->createProc = OneWordCreate;
103 tablePtr->findProc = ArrayFind;
104 tablePtr->createProc = ArrayCreate;
147 entryPtr->tablePtr->numEntries--;
170 Tcl_DeleteHashTable(tablePtr)
171 register Tcl_HashTable *tablePtr; /* Table to delete. */
180 for (i = 0; i < tablePtr->numBuckets; i++) {
181 hPtr = tablePtr->buckets[i];
193 if (tablePtr->buckets != tablePtr->staticBuckets) {
194 ckfree((char *) tablePtr->buckets);
202 tablePtr->findProc = BogusFind;
203 tablePtr->createProc = BogusCreate;
217 * The return value is a pointer to the first entry in tablePtr,
218 * or NULL if tablePtr has no entries in it. The memory at
230 Tcl_FirstHashEntry(tablePtr, searchPtr)
231 Tcl_HashTable *tablePtr; /* Table to search. */
235 searchPtr->tablePtr = tablePtr;
271 if (searchPtr->nextIndex >= searchPtr->tablePtr->numBuckets) {
275 searchPtr->tablePtr->buckets[searchPtr->nextIndex];
294 * about tablePtr. It is the caller's responsibility to free
304 Tcl_HashStats(tablePtr)
305 Tcl_HashTable *tablePtr; /* Table for which to produce stats. */
322 for (i = 0; i < tablePtr->numBuckets; i++) {
324 for (hPtr = tablePtr->buckets[i]; hPtr != NULL; hPtr = hPtr->nextPtr) {
333 average += (tmp+1.0)*(tmp/tablePtr->numEntries)/2.0;
342 tablePtr->numEntries, tablePtr->numBuckets);
430 StringFind(tablePtr, key)
431 Tcl_HashTable *tablePtr; /* Table in which to lookup entry. */
438 index = HashString(key) & tablePtr->mask;
444 for (hPtr = tablePtr->buckets[index]; hPtr != NULL;
481 StringCreate(tablePtr, key, newPtr)
482 Tcl_HashTable *tablePtr; /* Table in which to lookup entry. */
492 index = HashString(key) & tablePtr->mask;
498 for (hPtr = tablePtr->buckets[index]; hPtr != NULL;
518 hPtr->tablePtr = tablePtr;
519 hPtr->bucketPtr = &(tablePtr->buckets[index]);
524 tablePtr->numEntries++;
531 if (tablePtr->numEntries >= tablePtr->rebuildSize) {
532 RebuildTable(tablePtr);
557 OneWordFind(tablePtr, key)
558 Tcl_HashTable *tablePtr; /* Table in which to lookup entry. */
564 index = RANDOM_INDEX(tablePtr, key);
570 for (hPtr = tablePtr->buckets[index]; hPtr != NULL;
602 OneWordCreate(tablePtr, key, newPtr)
603 Tcl_HashTable *tablePtr; /* Table in which to lookup entry. */
612 index = RANDOM_INDEX(tablePtr, key);
618 for (hPtr = tablePtr->buckets[index]; hPtr != NULL;
632 hPtr->tablePtr = tablePtr;
633 hPtr->bucketPtr = &(tablePtr->buckets[index]);
638 tablePtr->numEntries++;
645 if (tablePtr->numEntries >= tablePtr->rebuildSize) {
646 RebuildTable(tablePtr);
671 ArrayFind(tablePtr, key)
672 Tcl_HashTable *tablePtr; /* Table in which to lookup entry. */
680 for (index = 0, count = tablePtr->keyType, iPtr1 = arrayPtr;
684 index = RANDOM_INDEX(tablePtr, index);
690 for (hPtr = tablePtr->buckets[index]; hPtr != NULL;
693 count = tablePtr->keyType; ; count--, iPtr1++, iPtr2++) {
728 ArrayCreate(tablePtr, key, newPtr)
729 Tcl_HashTable *tablePtr; /* Table in which to lookup entry. */
740 for (index = 0, count = tablePtr->keyType, iPtr1 = arrayPtr;
744 index = RANDOM_INDEX(tablePtr, index);
750 for (hPtr = tablePtr->buckets[index]; hPtr != NULL;
753 count = tablePtr->keyType; ; count--, iPtr1++, iPtr2++) {
770 + (tablePtr->keyType*sizeof(int)) - 4));
771 hPtr->tablePtr = tablePtr;
772 hPtr->bucketPtr = &(tablePtr->buckets[index]);
775 for (iPtr1 = arrayPtr, iPtr2 = hPtr->key.words, count = tablePtr->keyType;
780 tablePtr->numEntries++;
787 if (tablePtr->numEntries >= tablePtr->rebuildSize) {
788 RebuildTable(tablePtr);
814 BogusFind(tablePtr, key)
815 Tcl_HashTable *tablePtr; /* Table in which to lookup entry. */
843 BogusCreate(tablePtr, key, newPtr)
844 Tcl_HashTable *tablePtr; /* Table in which to lookup entry. */
876 RebuildTable(tablePtr)
877 register Tcl_HashTable *tablePtr; /* Table to enlarge. */
884 oldSize = tablePtr->numBuckets;
885 oldBuckets = tablePtr->buckets;
892 tablePtr->numBuckets *= 4;
893 tablePtr->buckets = (Tcl_HashEntry **) ckalloc((unsigned)
894 (tablePtr->numBuckets * sizeof(Tcl_HashEntry *)));
895 for (count = tablePtr->numBuckets, newChainPtr = tablePtr->buckets;
899 tablePtr->rebuildSize *= 4;
900 tablePtr->downShift -= 2;
901 tablePtr->mask = (tablePtr->mask << 2) + 3;
910 if (tablePtr->keyType == TCL_STRING_KEYS) {
911 index = HashString(hPtr->key.string) & tablePtr->mask;
912 } else if (tablePtr->keyType == TCL_ONE_WORD_KEYS) {
913 index = RANDOM_INDEX(tablePtr, hPtr->key.oneWordValue);
918 for (index = 0, count = tablePtr->keyType,
922 index = RANDOM_INDEX(tablePtr, index);
924 hPtr->bucketPtr = &(tablePtr->buckets[index]);
934 if (oldBuckets != tablePtr->staticBuckets) {