Lines Matching +full:max +full:- +full:size
1 /*-
79 ((__uint16_t *)(P))[1] = hashp->BSIZE - 3 * sizeof(__uint16_t); \
80 ((__uint16_t *)(P))[2] = hashp->BSIZE; \
98 off = OFFSET(bp) - key->size; in putpair()
99 memmove(p + off, key->data, key->size); in putpair()
103 off -= val->size; in putpair()
104 memmove(p + off, val->data, val->size); in putpair()
109 bp[n + 1] = off - ((n + 3) * sizeof(__uint16_t)); in putpair()
116 * -1 error
127 bp = (__uint16_t *)bufp->page; in __delpair()
133 newoff = bp[ndx - 1]; in __delpair()
135 newoff = hashp->BSIZE; in __delpair()
136 pairlen = newoff - bp[ndx + 1]; in __delpair()
138 if (ndx != (n - 1)) { in __delpair()
139 /* Hard Case -- need to shuffle keys */ in __delpair()
141 char *src = bufp->page + (int)OFFSET(bp); in __delpair()
143 memmove(dst, src, bp[ndx + 1] - OFFSET(bp)); in __delpair()
148 bp[i - 2] = bp[i]; in __delpair()
149 bp[i - 1] = bp[i + 1]; in __delpair()
151 bp[i - 2] = bp[i] + pairlen; in __delpair()
152 bp[i - 1] = bp[i + 1] + pairlen; in __delpair()
158 bp[n - 1] = bp[n + 1] + pairlen + 2 * sizeof(__uint16_t); in __delpair()
159 bp[0] = n - 2; in __delpair()
160 hashp->NKEYS--; in __delpair()
162 bufp->flags |= BUF_MOD; in __delpair()
168 * -1 ==> Error
183 copyto = (__uint16_t)hashp->BSIZE; in __split_page()
184 off = (__uint16_t)hashp->BSIZE; in __split_page()
187 return (-1); in __split_page()
190 return (-1); in __split_page()
192 old_bufp->flags |= (BUF_MOD | BUF_PIN); in __split_page()
193 new_bufp->flags |= (BUF_MOD | BUF_PIN); in __split_page()
195 ino = (__uint16_t *)(op = old_bufp->page); in __split_page()
196 np = new_bufp->page; in __split_page()
204 old_bufp->flags &= ~BUF_PIN; in __split_page()
205 new_bufp->flags &= ~BUF_PIN; in __split_page()
210 key.size = off - ino[n]; in __split_page()
212 if (__call_hash(hashp, key.data, key.size) == obucket) { in __split_page()
214 diff = copyto - off; in __split_page()
218 off - ino[n + 1]); in __split_page()
219 ino[ndx] = copyto + ino[n] - ino[n + 1]; in __split_page()
227 val.size = ino[n] - ino[n + 1]; in __split_page()
236 ino[0] -= moved; in __split_page()
237 FREESPACE(ino) = copyto - sizeof(__uint16_t) * (ino[0] + 3); in __split_page()
246 old_bufp->flags &= ~BUF_PIN; in __split_page()
247 new_bufp->flags &= ~BUF_PIN; in __split_page()
264 * -1 ==> failure
286 ino = (__uint16_t *)old_bufp->page; in ugly_split()
287 np = (__uint16_t *)new_bufp->page; in ugly_split()
288 op = (__uint16_t *)old_bufp->page; in ugly_split()
292 n = ino[0] - 1; in ugly_split()
296 new_bufp, bufp, bufp->addr, obucket, &ret)) in ugly_split()
297 return (-1); in ugly_split()
300 return (-1); in ugly_split()
301 op = (__uint16_t *)old_bufp->page; in ugly_split()
304 return (-1); in ugly_split()
305 np = (__uint16_t *)new_bufp->page; in ugly_split()
309 cino = (char *)bufp->page; in ugly_split()
315 * Fix up the old page -- the extra 2 are the fields in ugly_split()
318 ino[0] -= (moved + 2); in ugly_split()
320 scopyto - sizeof(__uint16_t) * (ino[0] + 3); in ugly_split()
325 return (-1); in ugly_split()
327 ino = (__uint16_t *)bufp->page; in ugly_split()
329 scopyto = hashp->BSIZE; in ugly_split()
337 off = hashp->BSIZE; in ugly_split()
341 key.size = off - ino[n]; in ugly_split()
343 val.size = ino[n] - ino[n + 1]; in ugly_split()
346 if (__call_hash(hashp, key.data, key.size) == obucket) { in ugly_split()
354 return (-1); in ugly_split()
355 op = (__uint16_t *)old_bufp->page; in ugly_split()
358 old_bufp->flags |= BUF_MOD; in ugly_split()
367 return (-1); in ugly_split()
368 np = (__uint16_t *)new_bufp->page; in ugly_split()
371 new_bufp->flags |= BUF_MOD; in ugly_split()
396 bp = (__uint16_t *)bufp->page; in __addel()
405 bufp = __get_buf(hashp, bp[bp[0] - 1], bufp, 0); in __addel()
407 return (-1); in __addel()
408 bp = (__uint16_t *)bufp->page; in __addel()
415 bufp = __get_buf(hashp, bp[bp[0] - 1], bufp, 0); in __addel()
417 return (-1); in __addel()
418 bp = (__uint16_t *)bufp->page; in __addel()
422 putpair(bufp->page, key, val); in __addel()
427 return (-1); in __addel()
428 sop = (__uint16_t *)bufp->page; in __addel()
434 return (-1); in __addel()
436 bufp->flags |= BUF_MOD; in __addel()
441 hashp->NKEYS++; in __addel()
443 (hashp->NKEYS / (hashp->MAX_BUCKET + 1) > hashp->FFACTOR)) in __addel()
462 sp = (__uint16_t *)bufp->page; in __add_ovflpage()
465 if (hashp->FFACTOR == DEF_FFACTOR) { in __add_ovflpage()
466 hashp->FFACTOR = sp[0] >> 1; in __add_ovflpage()
467 if (hashp->FFACTOR < MIN_FFACTOR) in __add_ovflpage()
468 hashp->FFACTOR = MIN_FFACTOR; in __add_ovflpage()
470 bufp->flags |= BUF_MOD; in __add_ovflpage()
473 tmp1 = bufp->addr; in __add_ovflpage()
474 tmp2 = bufp->ovfl ? bufp->ovfl->addr : 0; in __add_ovflpage()
476 if (!ovfl_num || !(bufp->ovfl = __get_buf(hashp, ovfl_num, bufp, 1))) in __add_ovflpage()
478 bufp->ovfl->flags |= BUF_MOD; in __add_ovflpage()
480 (void)fprintf(stderr, "ADDOVFLPAGE: %d->ovfl was %d is now %d\n", in __add_ovflpage()
481 tmp1, tmp2, bufp->ovfl->addr); in __add_ovflpage()
490 sp[ndx + 3] = FREESPACE(sp) - OVFLSIZE; in __add_ovflpage()
497 return (bufp->ovfl); in __add_ovflpage()
503 * -1 indicates FAILURE
513 int fd, page, size; in __get_page() local
517 fd = hashp->fp; in __get_page()
518 size = hashp->BSIZE; in __get_page()
520 if ((fd == -1) || !is_disk) { in __get_page()
528 if ((lseek(fd, (off_t)page << hashp->BSHIFT, SEEK_SET) == -1) || in __get_page()
529 ((rsize = read(fd, p, size)) == -1)) in __get_page()
530 return (-1); in __get_page()
535 if (rsize != size) { in __get_page()
537 return (-1); in __get_page()
542 if (hashp->LORDER != DB_BYTE_ORDER) { in __get_page()
543 int i, max; in __get_page() local
546 max = hashp->BSIZE >> 2; /* divide by 4 */ in __get_page()
547 for (i = 0; i < max; i++) in __get_page()
551 max = bp[0] + 2; in __get_page()
552 for (i = 1; i <= max; i++) in __get_page()
564 * -1 ==>failure
573 int fd, page, size; in __put_page() local
576 size = hashp->BSIZE; in __put_page()
577 if ((hashp->fp == -1) && open_temp(hashp)) in __put_page()
578 return (-1); in __put_page()
579 fd = hashp->fp; in __put_page()
581 if (hashp->LORDER != DB_BYTE_ORDER) { in __put_page()
583 int max; in __put_page() local
586 max = hashp->BSIZE >> 2; /* divide by 4 */ in __put_page()
587 for (i = 0; i < max; i++) in __put_page()
590 max = ((__uint16_t *)p)[0] + 2; in __put_page()
591 for (i = 0; i <= max; i++) in __put_page()
599 if ((lseek(fd, (off_t)page << hashp->BSHIFT, SEEK_SET) == -1) || in __put_page()
600 ((wsize = write(fd, p, size)) == -1)) in __put_page()
602 return (-1); in __put_page()
603 if (wsize != size) { in __put_page()
605 return (-1); in __put_page()
610 #define BYTE_MASK ((1 << INT_BYTE_SHIFT) -1)
624 if ((ip = (__uint32_t *)malloc(hashp->BSIZE)) == NULL) in __ibitmap()
626 hashp->nmaps++; in __ibitmap()
627 clearints = ((nbits - 1) >> INT_BYTE_SHIFT) + 1; in __ibitmap()
631 hashp->BSIZE - clearbytes); in __ibitmap()
632 ip[clearints - 1] = ALL_SET << (nbits & BYTE_MASK); in __ibitmap()
634 hashp->BITMAPS[ndx] = (__uint16_t)pnum; in __ibitmap()
635 hashp->mapp[ndx] = ip; in __ibitmap()
663 splitnum = hashp->OVFL_POINT; in overflow_page()
664 max_free = hashp->SPARES[splitnum]; in overflow_page()
666 free_page = (max_free - 1) >> (hashp->BSHIFT + BYTE_SHIFT); in overflow_page()
667 free_bit = (max_free - 1) & ((hashp->BSIZE << BYTE_SHIFT) - 1); in overflow_page()
670 first_page = hashp->LAST_FREED >>(hashp->BSHIFT + BYTE_SHIFT); in overflow_page()
672 if (!(freep = (__uint32_t *)hashp->mapp[i]) && in overflow_page()
678 in_use_bits = (hashp->BSIZE << BYTE_SHIFT) - 1; in overflow_page()
681 bit = hashp->LAST_FREED & in overflow_page()
682 ((hashp->BSIZE << BYTE_SHIFT) - 1); in overflow_page()
684 bit = bit & ~(BITS_PER_MAP - 1); in overflow_page()
695 hashp->LAST_FREED = hashp->SPARES[splitnum]; in overflow_page()
696 hashp->SPARES[splitnum]++; in overflow_page()
697 offset = hashp->SPARES[splitnum] - in overflow_page()
698 (splitnum ? hashp->SPARES[splitnum - 1] : 0); in overflow_page()
700 #define OVMSG "HASH: Out of overflow pages. Increase page size\n" in overflow_page()
703 (void)write(STDERR_FILENO, OVMSG, sizeof(OVMSG) - 1); in overflow_page()
706 hashp->OVFL_POINT = splitnum; in overflow_page()
707 hashp->SPARES[splitnum] = hashp->SPARES[splitnum-1]; in overflow_page()
708 hashp->SPARES[splitnum-1]--; in overflow_page()
713 if (free_bit == (hashp->BSIZE << BYTE_SHIFT) - 1) { in overflow_page()
716 (void)write(STDERR_FILENO, OVMSG, sizeof(OVMSG) - 1); in overflow_page()
733 hashp->SPARES[splitnum]++; in overflow_page()
741 sizeof(OVMSG) - 1); in overflow_page()
744 hashp->OVFL_POINT = splitnum; in overflow_page()
745 hashp->SPARES[splitnum] = hashp->SPARES[splitnum-1]; in overflow_page()
746 hashp->SPARES[splitnum-1]--; in overflow_page()
778 bit = 1 + bit + (i * (hashp->BSIZE << BYTE_SHIFT)); in overflow_page()
779 if (bit >= hashp->LAST_FREED) in overflow_page()
780 hashp->LAST_FREED = bit - 1; in overflow_page()
783 for (i = 0; (i < splitnum) && (bit > hashp->SPARES[i]); i++); in overflow_page()
784 offset = (i ? bit - hashp->SPARES[i - 1] : bit); in overflow_page()
808 addr = obufp->addr; in __free_ovflpage()
814 (ndx ? hashp->SPARES[ndx - 1] : 0) + (addr & SPLITMASK) - 1; in __free_ovflpage()
815 if (bit_address < hashp->LAST_FREED) in __free_ovflpage()
816 hashp->LAST_FREED = bit_address; in __free_ovflpage()
817 free_page = (bit_address >> (hashp->BSHIFT + BYTE_SHIFT)); in __free_ovflpage()
818 free_bit = bit_address & ((hashp->BSIZE << BYTE_SHIFT) - 1); in __free_ovflpage()
820 if (!(freep = hashp->mapp[free_page])) in __free_ovflpage()
831 obufp->addr, free_bit, free_page); in __free_ovflpage()
839 * -1 failure
851 if ((hashp->fp = mkstemp(namestr)) != -1) { in open_temp()
854 (void)fcntl(hashp->fp, F_SETFD, 1); in open_temp()
858 return (hashp->fp != -1 ? 0 : -1); in open_temp()
878 pageno = sp[n - 1]; in squeeze_key()
879 off -= key->size; in squeeze_key()
880 sp[n - 1] = off; in squeeze_key()
881 memmove(p + off, key->data, key->size); in squeeze_key()
882 off -= val->size; in squeeze_key()
884 memmove(p + off, val->data, val->size); in squeeze_key()
888 FREESPACE(sp) = free_space - PAIRSIZE(key, val); in squeeze_key()
895 if (ndx >= hashp->nmaps) in fetch_bitmap()
897 if ((hashp->mapp[ndx] = (__uint32_t *)malloc(hashp->BSIZE)) == NULL) in fetch_bitmap()
900 (char *)hashp->mapp[ndx], hashp->BITMAPS[ndx], 0, 1, 1)) { in fetch_bitmap()
901 free(hashp->mapp[ndx]); in fetch_bitmap()
904 return (hashp->mapp[ndx]); in fetch_bitmap()
917 bp = (short *)bufp->page;
920 oaddr = bp[bp[0] - 1];
923 bp = (short *)bufp->page;