aboutsummaryrefslogtreecommitdiff
path: root/src/include/utils/hsearch.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/include/utils/hsearch.h')
-rw-r--r--src/include/utils/hsearch.h190
1 files changed, 99 insertions, 91 deletions
diff --git a/src/include/utils/hsearch.h b/src/include/utils/hsearch.h
index 3f5727fba0f..577e6edfcdc 100644
--- a/src/include/utils/hsearch.h
+++ b/src/include/utils/hsearch.h
@@ -1,12 +1,12 @@
/*-------------------------------------------------------------------------
*
* hsearch.h--
- * for hashing in the new buffer manager
+ * for hashing in the new buffer manager
*
*
* Copyright (c) 1994, Regents of the University of California
*
- * $Id: hsearch.h,v 1.3 1997/08/19 21:40:35 momjian Exp $
+ * $Id: hsearch.h,v 1.4 1997/09/07 05:02:35 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -17,123 +17,131 @@
/*
* Constants
*/
-# define DEF_BUCKET_SIZE 256
-# define DEF_BUCKET_SHIFT 8 /* log2(BUCKET) */
-# define DEF_SEGSIZE 256
-# define DEF_SEGSIZE_SHIFT 8 /* log2(SEGSIZE) */
-# define DEF_DIRSIZE 256
-# define PRIME1 37
-# define PRIME2 1048583
-# define DEF_FFACTOR 1
-# define SPLTMAX 8
+#define DEF_BUCKET_SIZE 256
+#define DEF_BUCKET_SHIFT 8/* log2(BUCKET) */
+#define DEF_SEGSIZE 256
+#define DEF_SEGSIZE_SHIFT 8 /* log2(SEGSIZE) */
+#define DEF_DIRSIZE 256
+#define PRIME1 37
+#define PRIME2 1048583
+#define DEF_FFACTOR 1
+#define SPLTMAX 8
/*
* Hash bucket is actually bigger than this. Key field can have
* variable length and a variable length data field follows it.
*/
-typedef struct element {
- unsigned long next; /* secret from user */
- long key;
-} ELEMENT;
+typedef struct element
+{
+ unsigned long next; /* secret from user */
+ long key;
+} ELEMENT;
typedef unsigned long BUCKET_INDEX;
+
/* segment is an array of bucket pointers */
typedef BUCKET_INDEX *SEGMENT;
typedef unsigned long SEG_OFFSET;
-typedef struct hashhdr {
- long bsize; /* Bucket/Page Size */
- long bshift; /* Bucket shift */
- long dsize; /* Directory Size */
- long ssize; /* Segment Size */
- long sshift; /* Segment shift */
- long max_bucket; /* ID of Maximum bucket in use */
- long high_mask; /* Mask to modulo into entire table */
- long low_mask; /* Mask to modulo into lower half of table */
- long ffactor; /* Fill factor */
- long nkeys; /* Number of keys in hash table */
- long nsegs; /* Number of allocated segments */
- long keysize; /* hash key length in bytes */
- long datasize; /* elem data length in bytes */
- long max_dsize; /* 'dsize' limit if directory is fixed size */
- BUCKET_INDEX freeBucketIndex;
- /* index of first free bucket */
+typedef struct hashhdr
+{
+ long bsize; /* Bucket/Page Size */
+ long bshift; /* Bucket shift */
+ long dsize; /* Directory Size */
+ long ssize; /* Segment Size */
+ long sshift; /* Segment shift */
+ long max_bucket; /* ID of Maximum bucket in use */
+ long high_mask; /* Mask to modulo into entire table */
+ long low_mask; /* Mask to modulo into lower half of table */
+ long ffactor; /* Fill factor */
+ long nkeys; /* Number of keys in hash table */
+ long nsegs; /* Number of allocated segments */
+ long keysize; /* hash key length in bytes */
+ long datasize; /* elem data length in bytes */
+ long max_dsize; /* 'dsize' limit if directory is fixed
+ * size */
+ BUCKET_INDEX freeBucketIndex;
+ /* index of first free bucket */
#ifdef HASH_STATISTICS
- long accesses;
- long collisions;
+ long accesses;
+ long collisions;
#endif
-} HHDR;
-
-typedef struct htab {
- HHDR *hctl; /* shared control information */
- long (*hash)(); /* Hash Function */
- char *segbase; /* segment base address for
- * calculating pointer values
- */
- SEG_OFFSET *dir; /* 'directory' of segm starts */
- long *(*alloc)(); /* memory allocator
- * (long * for alignment reasons)
- */
-
-} HTAB;
-
-typedef struct hashctl {
- long bsize; /* Bucket Size */
- long ssize; /* Segment Size */
- long dsize; /* Dirsize Size */
- long ffactor; /* Fill factor */
- long (*hash)(); /* Hash Function */
- long keysize; /* hash key length in bytes */
- long datasize; /* elem data length in bytes */
- long max_size; /* limit to dsize if directory size is limited */
- long *segbase; /* base for calculating bucket + seg ptrs */
- long * (*alloc)(); /* memory allocation function */
- long *dir; /* directory if allocated already */
- long *hctl; /* location of header information in shd mem */
-} HASHCTL;
+} HHDR;
+
+typedef struct htab
+{
+ HHDR *hctl; /* shared control information */
+ long (*hash) (); /* Hash Function */
+ char *segbase; /* segment base address for calculating
+ * pointer values */
+ SEG_OFFSET *dir; /* 'directory' of segm starts */
+ long *(*alloc) ();/* memory allocator (long * for alignment
+ * reasons) */
+
+} HTAB;
+
+typedef struct hashctl
+{
+ long bsize; /* Bucket Size */
+ long ssize; /* Segment Size */
+ long dsize; /* Dirsize Size */
+ long ffactor; /* Fill factor */
+ long (*hash) (); /* Hash Function */
+ long keysize; /* hash key length in bytes */
+ long datasize; /* elem data length in bytes */
+ long max_size; /* limit to dsize if directory size is
+ * limited */
+ long *segbase; /* base for calculating bucket + seg ptrs */
+ long *(*alloc) ();/* memory allocation function */
+ long *dir; /* directory if allocated already */
+ long *hctl; /* location of header information in shd
+ * mem */
+} HASHCTL;
/* Flags to indicate action for hctl */
-#define HASH_BUCKET 0x001 /* Setting bucket size */
+#define HASH_BUCKET 0x001 /* Setting bucket size */
#define HASH_SEGMENT 0x002 /* Setting segment size */
#define HASH_DIRSIZE 0x004 /* Setting directory size */
#define HASH_FFACTOR 0x008 /* Setting fill factor */
#define HASH_FUNCTION 0x010 /* Set user defined hash function */
-#define HASH_ELEM 0x020 /* Setting key/data size */
-#define HASH_SHARED_MEM 0x040 /* Setting shared mem const */
-#define HASH_ATTACH 0x080 /* Do not initialize hctl */
-#define HASH_ALLOC 0x100 /* Setting memory allocator */
+#define HASH_ELEM 0x020 /* Setting key/data size */
+#define HASH_SHARED_MEM 0x040 /* Setting shared mem const */
+#define HASH_ATTACH 0x080 /* Do not initialize hctl */
+#define HASH_ALLOC 0x100 /* Setting memory allocator */
/* seg_alloc assumes that INVALID_INDEX is 0*/
-#define INVALID_INDEX (0)
-#define NO_MAX_DSIZE (-1)
+#define INVALID_INDEX (0)
+#define NO_MAX_DSIZE (-1)
/* number of hash buckets allocated at once */
-#define BUCKET_ALLOC_INCR (30)
+#define BUCKET_ALLOC_INCR (30)
/* hash_search operations */
-typedef enum {
- HASH_FIND,
- HASH_ENTER,
- HASH_REMOVE,
- HASH_FIND_SAVE,
- HASH_REMOVE_SAVED
-} HASHACTION;
-
-/*
+typedef enum
+{
+ HASH_FIND,
+ HASH_ENTER,
+ HASH_REMOVE,
+ HASH_FIND_SAVE,
+ HASH_REMOVE_SAVED
+} HASHACTION;
+
+/*
* prototypes from functions in dynahash.c
*/
-extern HTAB *hash_create(int nelem, HASHCTL *info, int flags);
-extern void hash_destroy(HTAB *hashp);
-extern void hash_stats(char *where, HTAB *hashp);
-extern long *hash_search(HTAB *hashp, char *keyPtr, HASHACTION action,
- bool *foundPtr);
-extern long *hash_seq(HTAB *hashp);
-
-/*
+extern HTAB *hash_create(int nelem, HASHCTL * info, int flags);
+extern void hash_destroy(HTAB * hashp);
+extern void hash_stats(char *where, HTAB * hashp);
+extern long *
+hash_search(HTAB * hashp, char *keyPtr, HASHACTION action,
+ bool * foundPtr);
+extern long *hash_seq(HTAB * hashp);
+
+/*
* prototypes from functions in hashfn.c
*/
-extern long string_hash(char *key, int keysize);
-extern long tag_hash(int *key, int keysize);
+extern long string_hash(char *key, int keysize);
+extern long tag_hash(int *key, int keysize);
-#endif /* HSEARCH_H */
+#endif /* HSEARCH_H */