Lines Matching refs:db
200 bsd_clear(struct bsd_db *db)
202 db->clear_count++;
203 db->max_ent = FIRST-1;
204 db->n_bits = BSD_INIT_BITS;
205 db->ratio = 0;
206 db->bytes_out = 0;
207 db->in_count = 0;
208 db->checkpoint = CHECK_GAP;
225 bsd_check(struct bsd_db *db)
229 if (db->in_count >= db->checkpoint) {
231 if (db->in_count >= RATIO_MAX
232 || db->bytes_out >= RATIO_MAX) {
233 db->in_count -= db->in_count/4;
234 db->bytes_out -= db->bytes_out/4;
237 db->checkpoint = db->in_count + CHECK_GAP;
239 if (db->max_ent >= db->maxmaxcode) {
245 * db->in_count <= RATIO_MAX.
247 new_ratio = db->in_count << RATIO_SCALE_LOG;
248 if (db->bytes_out != 0)
249 new_ratio /= db->bytes_out;
251 if (new_ratio < db->ratio || new_ratio < 1 * RATIO_SCALE) {
252 bsd_clear(db);
255 db->ratio = new_ratio;
267 struct bsd_db *db = (struct bsd_db *) state;
270 stats->unc_bytes = db->uncomp_bytes;
271 stats->unc_packets = db->uncomp_count;
272 stats->comp_bytes = db->comp_bytes;
273 stats->comp_packets = db->comp_count;
274 stats->inc_bytes = db->incomp_bytes;
275 stats->inc_packets = db->incomp_count;
276 stats->ratio = db->in_count;
277 out = db->bytes_out;
292 struct bsd_db *db = (struct bsd_db *) state;
294 db->seqno = 0;
295 bsd_clear(db);
296 db->clear_count = 0;
307 struct bsd_db *db;
343 newlen = sizeof(*db) + (hsize-1) * (sizeof(db->dict[0]));
344 db = malloc(newlen, M_DEVBUF, M_NOWAIT|M_ZERO);
345 if (!db)
349 db->lens = NULL;
351 db->lens = malloc((maxmaxcode+1) * sizeof(db->lens[0]),
353 if (!db->lens) {
354 free(db, M_DEVBUF);
359 db->totlen = newlen;
360 db->hsize = hsize;
361 db->hshift = hshift;
362 db->maxmaxcode = maxmaxcode;
363 db->maxbits = bits;
365 return (void *) db;
371 struct bsd_db *db = (struct bsd_db *) state;
373 if (db->lens)
374 free(db->lens, M_DEVBUF);
375 free(db, M_DEVBUF);
394 bsd_init(struct bsd_db *db, u_char *options, int opt_len, int unit, int hdrlen,
402 || BSD_NBITS(options[2]) != db->maxbits
403 || (decomp && db->lens == NULL))
409 db->lens[--i] = 1;
411 i = db->hsize;
413 db->dict[--i].codem1 = BADCODEM1;
414 db->dict[i].cptr = 0;
417 db->unit = unit;
418 db->hdrlen = hdrlen;
419 db->mru = mru;
423 db->debug = 1;
425 bsd_reset(db);
458 struct bsd_db *db = (struct bsd_db *) state;
459 int hshift = db->hshift;
460 u_int max_ent = db->max_ent;
461 u_int n_bits = db->n_bits;
524 if (maxolen + db->hdrlen > MLEN)
526 m->m_data += db->hdrlen;
541 *wptr++ = db->seqno >> 8;
542 *wptr++ = db->seqno;
544 ++db->seqno;
566 dictp = &db->dict[hval];
580 if (hval >= db->hsize)
581 hval -= db->hsize;
582 dictp = &db->dict[hval];
593 if (max_ent < db->maxmaxcode) {
597 db->n_bits = ++n_bits;
602 dictp2 = &db->dict[max_ent+1];
603 if (db->dict[dictp2->cptr].codem1 == max_ent)
604 db->dict[dictp2->cptr].codem1 = BADCODEM1;
609 db->max_ent = ++max_ent;
615 db->bytes_out += olen;
616 db->in_count += ilen;
618 ++db->bytes_out; /* count complete bytes */
620 if (bsd_check(db))
639 if (max_ent >= MAXCODE(n_bits) && max_ent < db->maxmaxcode)
640 db->n_bits++;
642 db->uncomp_bytes += ilen;
643 ++db->uncomp_count;
648 ++db->incomp_count;
649 db->incomp_bytes += ilen;
651 ++db->comp_count;
652 db->comp_bytes += olen + BSD_OVHD;
668 struct bsd_db *db = (struct bsd_db *) state;
669 u_int hshift = db->hshift;
670 u_int max_ent = db->max_ent;
671 u_int n_bits = db->n_bits;
691 db->seqno++;
710 dictp = &db->dict[hval];
724 if (hval >= db->hsize)
725 hval -= db->hsize;
726 dictp = &db->dict[hval];
737 if (max_ent < db->maxmaxcode) {
741 db->n_bits = ++n_bits;
746 dictp2 = &db->dict[max_ent+1];
747 if (db->dict[dictp2->cptr].codem1 == max_ent)
748 db->dict[dictp2->cptr].codem1 = BADCODEM1;
753 db->max_ent = ++max_ent;
754 db->lens[max_ent] = db->lens[ent]+1;
760 db->bytes_out += bitno/8;
761 db->in_count += ilen;
762 (void)bsd_check(db);
764 ++db->incomp_count;
765 db->incomp_bytes += ilen;
766 ++db->uncomp_count;
767 db->uncomp_bytes += ilen;
772 if (max_ent >= MAXCODE(n_bits) && max_ent < db->maxmaxcode)
773 db->n_bits++;
796 struct bsd_db *db = (struct bsd_db *) state;
797 u_int max_ent = db->max_ent;
800 u_int n_bits = db->n_bits;
837 if (seq != db->seqno) {
838 if (db->debug)
840 db->unit, seq, db->seqno - 1);
843 ++db->seqno;
855 dmp->m_data += db->hdrlen;
907 if (db->debug)
908 printf("bsd_decomp%d: bad CLEAR\n", db->unit);
912 bsd_clear(db);
917 if (incode > max_ent + 2 || incode > db->maxmaxcode
920 if (db->debug) {
922 db->unit, incode, oldcode);
924 max_ent, explen, db->seqno);
938 codelen = db->lens[finchar];
940 if (explen > db->mru + 1) {
942 if (db->debug) {
943 printf("bsd_decomp%d: ran out of mru\n", db->unit);
984 dictp = &db->dict[db->dict[finchar].cptr];
997 db->unit, codelen, incode, max_ent);
1010 if (oldcode != CLEAR && max_ent < db->maxmaxcode) {
1016 hval = BSD_HASH(oldcode,finchar,db->hshift);
1017 dictp = &db->dict[hval];
1024 if (hval >= db->hsize)
1025 hval -= db->hsize;
1026 dictp = &db->dict[hval];
1034 dictp2 = &db->dict[max_ent+1];
1035 if (db->dict[dictp2->cptr].codem1 == max_ent) {
1036 db->dict[dictp2->cptr].codem1 = BADCODEM1;
1042 db->max_ent = ++max_ent;
1043 db->lens[max_ent] = db->lens[oldcode]+1;
1046 if (max_ent >= MAXCODE(n_bits) && max_ent < db->maxmaxcode) {
1047 db->n_bits = ++n_bits;
1059 db->bytes_out += ilen;
1060 db->in_count += explen;
1061 if (bsd_check(db) && db->debug) {
1063 db->unit);
1066 ++db->comp_count;
1067 db->comp_bytes += ilen + BSD_OVHD;
1068 ++db->uncomp_count;
1069 db->uncomp_bytes += explen;
1077 printf("bsd_decomp%d: fell off end of chain ", db->unit);
1079 incode, finchar, db->dict[finchar].cptr, max_ent);
1082 db->unit, incode, finchar);
1084 db->dict[finchar].cptr, dictp->codem1);