Lines Matching refs:hashp
86 _DIAGASSERT((size_t)HASH_BSIZE(hashp) >= temp); \
87 ((uint16_t *)(void *)(P))[1] = (uint16_t)(HASH_BSIZE(hashp) - temp); \
88 ((uint16_t *)(void *)(P))[2] = HASH_BSIZE(hashp); \
133 __delpair(HTAB *hashp, BUFHEAD *bufp, int ndx) in __delpair() argument
144 return (__big_delete(hashp, bufp)); in __delpair()
148 newoff = HASH_BSIZE(hashp); in __delpair()
175 hashp->NKEYS--; in __delpair()
186 __split_page(HTAB *hashp, uint32_t obucket, uint32_t nbucket) in __split_page() argument
197 copyto = HASH_BSIZE(hashp); in __split_page()
198 off = HASH_BSIZE(hashp); in __split_page()
199 old_bufp = __get_buf(hashp, obucket, NULL, 0); in __split_page()
202 new_bufp = __get_buf(hashp, nbucket, NULL, 0); in __split_page()
216 retval = ugly_split(hashp, obucket, old_bufp, new_bufp, in __split_page()
226 if (__call_hash(hashp, key.data, (int)key.size) == obucket) { in __split_page()
284 HTAB *hashp, in ugly_split() argument
314 if (__big_split(hashp, old_bufp, in ugly_split()
343 bufp = __get_buf(hashp, (uint32_t)ov_addr, bufp, 0); in ugly_split()
349 scopyto = HASH_BSIZE(hashp); in ugly_split()
353 __free_ovflpage(hashp, last_bfp); in ugly_split()
357 off = HASH_BSIZE(hashp); in ugly_split()
366 if (__call_hash(hashp, key.data, (int)key.size) == obucket) { in ugly_split()
372 __add_ovflpage(hashp, old_bufp); in ugly_split()
385 __add_ovflpage(hashp, new_bufp); in ugly_split()
396 __free_ovflpage(hashp, last_bfp); in ugly_split()
408 __addel(HTAB *hashp, BUFHEAD *bufp, const DBT *key, const DBT *val) in __addel() argument
422 bufp = __get_buf(hashp, (uint32_t)bp[bp[0] - 1], bufp, in __addel()
437 bufp = __get_buf(hashp, in __addel()
449 bufp = __add_ovflpage(hashp, bufp); in __addel()
457 if (__big_insert(hashp, bufp, key, val)) in __addel()
466 hashp->NKEYS++; in __addel()
468 (hashp->NKEYS / (hashp->MAX_BUCKET + 1) > hashp->FFACTOR)) in __addel()
469 return (__expand_table(hashp)); in __addel()
480 __add_ovflpage(HTAB *hashp, BUFHEAD *bufp) in __add_ovflpage() argument
491 if (hashp->FFACTOR == DEF_FFACTOR) { in __add_ovflpage()
492 hashp->FFACTOR = (uint32_t)sp[0] >> 1; in __add_ovflpage()
493 if (hashp->FFACTOR < MIN_FFACTOR) in __add_ovflpage()
494 hashp->FFACTOR = MIN_FFACTOR; in __add_ovflpage()
497 ovfl_num = overflow_page(hashp); in __add_ovflpage()
502 if (!ovfl_num || !(bufp->ovfl = __get_buf(hashp, (uint32_t)ovfl_num, in __add_ovflpage()
535 __get_page(HTAB *hashp, char *p, uint32_t bucket, int is_bucket, int is_disk, in __get_page() argument
543 fd = hashp->fp; in __get_page()
544 size = HASH_BSIZE(hashp); in __get_page()
554 if ((rsize = pread(fd, p, (size_t)size, (off_t)page << hashp->BSHIFT)) == -1) in __get_page()
567 if (hashp->LORDER != BYTE_ORDER) { in __get_page()
571 max = (uint32_t)hashp->BSIZE >> 2; /* divide by 4 */ in __get_page()
592 __put_page(HTAB *hashp, char *p, uint32_t bucket, int is_bucket, int is_bitmap) in __put_page() argument
598 size = HASH_BSIZE(hashp); in __put_page()
599 if ((hashp->fp == -1) && (hashp->fp = __dbtemp("_hash", NULL)) == -1) in __put_page()
601 fd = hashp->fp; in __put_page()
603 if (hashp->LORDER != BYTE_ORDER) { in __put_page()
609 max = (uint32_t)hashp->BSIZE >> 2; /* divide by 4 */ in __put_page()
624 if ((wsize = pwrite(fd, p, (size_t)size, (off_t)page << hashp->BSHIFT)) == -1) in __put_page()
640 __ibitmap(HTAB *hashp, int pnum, int nbits, int ndx) in __ibitmap() argument
645 if ((ip = malloc((size_t)hashp->BSIZE)) == NULL) in __ibitmap()
647 hashp->nmaps++; in __ibitmap()
652 (size_t)(hashp->BSIZE - clearbytes)); in __ibitmap()
655 hashp->BITMAPS[ndx] = (uint16_t)pnum; in __ibitmap()
656 hashp->mapp[ndx] = ip; in __ibitmap()
675 overflow_page(HTAB *hashp) in overflow_page() argument
684 splitnum = hashp->OVFL_POINT; in overflow_page()
685 max_free = hashp->SPARES[splitnum]; in overflow_page()
687 free_page = (uint32_t)(max_free - 1) >> (hashp->BSHIFT + BYTE_SHIFT); in overflow_page()
688 free_bit = (max_free - 1) & ((hashp->BSIZE << BYTE_SHIFT) - 1); in overflow_page()
691 first_page = (uint32_t)hashp->LAST_FREED >>(hashp->BSHIFT + BYTE_SHIFT); in overflow_page()
693 if (!(freep = (uint32_t *)hashp->mapp[i]) && in overflow_page()
694 !(freep = fetch_bitmap(hashp, i))) in overflow_page()
699 in_use_bits = (hashp->BSIZE << BYTE_SHIFT) - 1; in overflow_page()
702 bit = hashp->LAST_FREED & in overflow_page()
703 ((hashp->BSIZE << BYTE_SHIFT) - 1); in overflow_page()
716 hashp->LAST_FREED = hashp->SPARES[splitnum]; in overflow_page()
717 hashp->SPARES[splitnum]++; in overflow_page()
718 offset = hashp->SPARES[splitnum] - in overflow_page()
719 (splitnum ? hashp->SPARES[splitnum - 1] : 0); in overflow_page()
728 hashp->OVFL_POINT = splitnum; in overflow_page()
729 hashp->SPARES[splitnum] = hashp->SPARES[splitnum-1]; in overflow_page()
730 hashp->SPARES[splitnum-1]--; in overflow_page()
735 if (free_bit == (hashp->BSIZE << BYTE_SHIFT) - 1) { in overflow_page()
753 if (__ibitmap(hashp, in overflow_page()
756 hashp->SPARES[splitnum]++; in overflow_page()
768 hashp->OVFL_POINT = splitnum; in overflow_page()
769 hashp->SPARES[splitnum] = hashp->SPARES[splitnum-1]; in overflow_page()
770 hashp->SPARES[splitnum-1]--; in overflow_page()
802 bit = 1 + bit + (i * (hashp->BSIZE << BYTE_SHIFT)); in overflow_page()
803 if (bit >= hashp->LAST_FREED) in overflow_page()
804 hashp->LAST_FREED = bit - 1; in overflow_page()
807 for (i = 0; (i < splitnum) && (bit > hashp->SPARES[i]); i++); in overflow_page()
808 offset = (i ? bit - hashp->SPARES[i - 1] : bit); in overflow_page()
828 __free_ovflpage(HTAB *hashp, BUFHEAD *obufp) in __free_ovflpage() argument
841 (ndx ? hashp->SPARES[ndx - 1] : 0) + (addr & SPLITMASK) - 1; in __free_ovflpage()
842 if (bit_address < hashp->LAST_FREED) in __free_ovflpage()
843 hashp->LAST_FREED = bit_address; in __free_ovflpage()
844 free_page = ((uint32_t)bit_address >> (hashp->BSHIFT + BYTE_SHIFT)); in __free_ovflpage()
845 free_bit = bit_address & ((hashp->BSIZE << BYTE_SHIFT) - 1); in __free_ovflpage()
847 if (!(freep = hashp->mapp[free_page])) in __free_ovflpage()
848 freep = fetch_bitmap(hashp, free_page); in __free_ovflpage()
860 __reclaim_buf(hashp, obufp); in __free_ovflpage()
898 fetch_bitmap(HTAB *hashp, int ndx) in fetch_bitmap() argument
900 if (ndx >= hashp->nmaps) in fetch_bitmap()
902 if ((hashp->mapp[ndx] = malloc((size_t)hashp->BSIZE)) == NULL) in fetch_bitmap()
904 if (__get_page(hashp, in fetch_bitmap()
905 (char *)(void *)hashp->mapp[ndx], (uint32_t)hashp->BITMAPS[ndx], 0, 1, 1)) { in fetch_bitmap()
906 free(hashp->mapp[ndx]); in fetch_bitmap()
909 return (hashp->mapp[ndx]); in fetch_bitmap()
915 print_chain(HTAB *hashp, uint32_t addr) in print_chain() argument
921 bufp = __get_buf(hashp, addr, NULL, 0); in print_chain()
927 bufp = __get_buf(hashp, (uint32_t)oaddr, bufp, 0); in print_chain()