1 /* 2 * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas. 3 * All Rights Reserved. 4 * 5 * Permission is hereby granted, free of charge, to any person obtaining a 6 * copy of this software and associated documentation files (the "Software"), 7 * to deal in the Software without restriction, including without limitation 8 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 9 * and/or sell copies of the Software, and to permit persons to whom the 10 * Software is furnished to do so, subject to the following conditions: 11 * 12 * The above copyright notice and this permission notice (including the next 13 * paragraph) shall be included in all copies or substantial portions of the 14 * Software. 15 * 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 19 * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR 20 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 21 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 22 * DEALINGS IN THE SOFTWARE. 23 * 24 * Authors: Rickard E. (Rik) Faith <faith@valinux.com> 25 */ 26 27 #define HASH_INVALID 0xffffffff /* A value that is out of bound */ 28 #define HASH_SIZE 512 /* Good for about 100 entries */ 29 /* If you change this value, you probably 30 have to change the HashHash hashing 31 function! */ 32 33 typedef struct HashBucket { 34 unsigned long key; 35 void *value; 36 struct HashBucket *next; 37 } HashBucket, *HashBucketPtr; 38 39 typedef struct HashTable { 40 unsigned long magic; 41 unsigned long entries; 42 unsigned long hits; /* At top of linked list */ 43 unsigned long partials; /* Not at top of linked list */ 44 unsigned long misses; /* Not in table */ 45 HashBucketPtr buckets[HASH_SIZE]; 46 int p0; 47 HashBucketPtr p1; 48 } HashTable, *HashTablePtr; 49