00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include "db_config.h"
00011
00012 #ifndef NO_SYSTEM_INCLUDES
00013 #include <sys/types.h>
00014 #endif
00015
00016 #include "db_int.h"
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 static const struct {
00028 u_int32_t power;
00029 u_int32_t prime;
00030 } list[] = {
00031 { 32, 37},
00032 { 64, 67},
00033 { 128, 131},
00034 { 256, 257},
00035 { 512, 521},
00036 { 1024, 1031},
00037 { 2048, 2053},
00038 { 4096, 4099},
00039 { 8192, 8191},
00040 { 16384, 16381},
00041 { 32768, 32771},
00042 { 65536, 65537},
00043 { 131072, 131071},
00044 { 262144, 262147},
00045 { 393216, 393209},
00046 { 524288, 524287},
00047 { 786432, 786431},
00048 { 1048576, 1048573},
00049 { 1572864, 1572869},
00050 { 2097152, 2097169},
00051 { 3145728, 3145721},
00052 { 4194304, 4194301},
00053 { 6291456, 6291449},
00054 { 8388608, 8388617},
00055 { 12582912, 12582917},
00056 { 16777216, 16777213},
00057 { 25165824, 25165813},
00058 { 33554432, 33554393},
00059 { 50331648, 50331653},
00060 { 67108864, 67108859},
00061 { 100663296, 100663291},
00062 { 134217728, 134217757},
00063 { 201326592, 201326611},
00064 { 268435456, 268435459},
00065 { 402653184, 402653189},
00066 { 536870912, 536870909},
00067 { 805306368, 805306357},
00068 {1073741824, 1073741827},
00069 {0, 0}
00070 };
00071
00072
00073
00074
00075
00076
00077
00078 u_int32_t
00079 __db_tablesize(n_buckets)
00080 u_int32_t n_buckets;
00081 {
00082 u_int i;
00083
00084
00085
00086
00087
00088
00089
00090
00091 if (n_buckets < 32)
00092 n_buckets = 32;
00093
00094 for (i = 0; i < sizeof(list)/sizeof(list[0]); ++i)
00095 if (list[i].power >= n_buckets)
00096 return (list[i].prime);
00097 return (list[--i].prime);
00098 }
00099
00100
00101
00102
00103
00104
00105
00106 void
00107 __db_hashinit(begin, nelements)
00108 void *begin;
00109 u_int32_t nelements;
00110 {
00111 u_int32_t i;
00112 SH_TAILQ_HEAD(hash_head) *headp;
00113
00114 headp = (struct hash_head *)begin;
00115
00116 for (i = 0; i < nelements; i++, headp++)
00117 SH_TAILQ_INIT(headp);
00118 }