48 #define ISPOWER2(x) (((x) & (x-1)) == 0) 69 11, 23, 37, 53, 67, 79, 97, 109, 127, 149,
70 167, 191, 211, 227, 251, 269, 293, 311, 331, 349,
71 367, 389, 409, 431, 449, 467, 487, 509, 541, 563,
72 587, 607, 631, 653, 673, 521, 541, 557, 569, 587,
73 599, 613, 641, 673, 701, 727, 751, 787, 821, 853,
74 881, 907, 941, 977, 1039, 1087, 1129, 1171, 1212, 1259,
75 1301, 1361, 1409, 1471, 1523, 1579, 1637, 1693, 1747, 1777,
76 1823, 1867, 1913, 1973, 2017, 2129, 2237, 2339, 2441, 2543,
77 2647, 2749, 2851, 2953, 3061, 3163, 3271, 3373, 3491, 3593,
78 3697, 3803, 3907, 4013, 4177, 4337, 4493, 4649, 4801, 4957
103 int left, right, middle;
114 htsize = htsize & (htsize - 1);
116 htsize = htsize << 1;
122 for (left = 0, right =
NPRIMES - 1; left <= right;)
193 if (page_size < entry_size)
217 if (!hash_filename || hash_filename[0] ==
'\0')
232 #if defined(SOLARIS) || defined(AIX) || (defined(I386) && defined(LINUX)) || (defined(HPUX) && (_LFS64_LARGEFILE == 1)) 267 memset (ht->
pg_hdr, 0, size);
275 pg_hdr->
next = pg_hdr + 1;
276 pg_hdr->
prev = pg_hdr - 1;
282 memset ((
char *) pg_hdr->
fh_entries, 0, page_size);
314 for (pg_hdr = ht->
pg_hdr; pg_hdr; pg_hdr = pg_hdr->
next)
372 if (hash >= ht->
size)
374 hash = hash % ht->
size;
386 if ((pg_hdr = fh_fetch_page (ht, page_no)) ==
NULL)
405 if ((*ht->
cmpfun) (&entry->
info.fh_oidk_key, key))
407 *data = &entry->
info.fh_oidk_data;
418 if ((*ht->
cmpfun) (&entry->
info.fh_intk_key, key))
420 *data = &entry->
info.fh_intk_data;
468 if (hash >= ht->
size)
470 hash = hash % ht->
size;
482 if ((pg_hdr = fh_fetch_page (ht, page_no)) ==
NULL)
499 if ((*ht->
cmpfun) (&entry->
info.fh_oidk_key, key))
501 memcpy (&entry->
info.fh_oidk_data, (
char *) data, ht->
data_size);
510 if ((*ht->
cmpfun) (&entry->
info.fh_intk_key, key))
512 memcpy (&entry->
info.fh_intk_data, (
char *) data, ht->
data_size);
527 if ((pg_hdr = fh_fetch_page (ht, page_no)) ==
NULL)
544 entry->
info.fh_oidk_key.volid = ((
OID *) key)->volid;
545 entry->
info.fh_oidk_key.pageid = ((
OID *) key)->pageid;
546 entry->
info.fh_oidk_key.slotid = ((
OID *) key)->slotid;
547 memcpy (&entry->
info.fh_oidk_data, (
char *) data, ht->
data_size);
550 entry->
info.fh_intk_key = *(
int *) key;
551 memcpy (&entry->
info.fh_intk_data, (
char *) data, ht->
data_size);
581 for (pg_hdr = ht->
pg_hdr; pg_hdr; pg_hdr = pg_hdr->
next)
584 if (pg_hdr->
page == (
unsigned int) page)
593 if ((pg_hdr = fh_read_page (ht, page)) ==
NULL)
645 #if defined(SOLARIS) || defined(AIX) || (defined(HPUX) && (_LFS64_LARGEFILE == 1)) 647 #elif defined(I386) && defined(LINUX) 649 #elif defined(WINDOWS) 683 for (i = 0, entry = pg_hdr->
fh_entries; i < ht->entries_per_page; ++i)
697 ptr = (
char *) entry;
706 #if defined(SOLARIS) || defined(AIX) || (defined(HPUX) && (_LFS64_LARGEFILE == 1)) 707 offset = lseek64 (ht->
fd, ((off64_t) page) * ht->
page_size, SEEK_SET);
708 #elif defined(I386) && defined(LINUX) 709 offset = lseek64 (ht->
fd, ((__off64_t) page) * ht->
page_size, SEEK_SET);
710 #elif defined(WINDOWS) 711 offset = _lseeki64 (ht->
fd, ((__int64) page) * ht->
page_size, SEEK_SET);
713 offset = lseek (ht->
fd, page * ht->
page_size, SEEK_SET);
740 #if defined(SOLARIS) || defined(AIX) || (defined(HPUX) && (_LFS64_LARGEFILE == 1)) 742 #elif defined(I386) && defined(LINUX) 744 #elif defined(WINDOWS) 752 #if defined(SOLARIS) || defined(AIX) || (defined(HPUX) && (_LFS64_LARGEFILE == 1)) 753 offset = lseek64 (ht->
fd, ((off64_t) pg_hdr->
page) * ht->
page_size, SEEK_SET);
754 #elif defined(I386) && defined(LINUX) 755 offset = lseek64 (ht->
fd, ((__off64_t) pg_hdr->
page) * ht->
page_size, SEEK_SET);
756 #elif defined(WINDOWS) 757 offset = _lseeki64 (ht->
fd, ((__int64) pg_hdr->
page) * ht->
page_size, SEEK_SET);
793 ht->
bitmap[byte] |= 1 << bit;
815 perror (
"SYSTEM ERROR");
823 return ht->
bitmap[byte] & 1 << bit;
835 static char oid_string[] =
"OID";
836 static char int_string[] =
"INT";
859 (
unsigned long) (
unsigned long long) ht->
pg_hdr);
861 (
unsigned long) (
unsigned long long) ht->
pg_hdr_last);
863 (
unsigned long) (
unsigned long long) ht->
pg_hdr_free);
865 (
unsigned long) (
unsigned long long) ht->
bitmap);
void fh_dump(FH_TABLE *ht)
FH_TABLE * fh_create(const char *name, int est_size, int page_size, int cached_pages, const char *hash_filename, FH_KEY_TYPE key_type, int data_size, HASH_FUNC hfun, CMP_FUNC cmpfun)
static FH_PAGE_HDR * fh_read_page(FH_TABLE *ht, int page)
static int fh_calculate_htsize(int htsize)
static int fh_Primes[NPRIMES]
#define COPY_OID(dest_oid_ptr, src_oid_ptr)
static FH_PAGE_HDR * fh_write_page(FH_TABLE *ht, FH_PAGE_HDR *pg_hdr)
#define OR_PUT_NULL_OID(ptr)
struct fh_page_hdr * next
int fh_get(FH_TABLE *ht, FH_KEY key, FH_DATA *data)
static FH_PAGE_HDR * fh_fetch_page(FH_TABLE *ht, int page)
FH_PAGE_HDR * pg_hdr_alloc
#define CEIL_PTVDIV(dividend, divisor)
struct fh_entry * fh_entries
static int fh_bittest(FH_TABLE *ht, int page)
void fh_destroy(FH_TABLE *ht)
#define free_and_init(ptr)
unsigned int(* HASH_FUNC)(const void *info, unsigned int htsize)
static void fh_bitset(FH_TABLE *ht, int page)
char * msgcat_message(int cat_id, int set_id, int msg_id)
int fh_put(FH_TABLE *ht, FH_KEY key, FH_DATA data)
char * strdup(const char *str)
int(* CMP_FUNC)(const void *key1, const void *key2)
FH_PAGE_HDR * pg_hdr_last
struct fh_page_hdr * prev
std::pair< std::string, int > open_temp_filedes(const char *prefix, int flags=0)
FH_PAGE_HDR * pg_hdr_free
#define MSGCAT_CATALOG_UTILS