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