Lines Matching defs:stp
159 Str_tbl *stp;
161 if ((stp = calloc(sizeof (*stp), 1)) == NULL)
167 stp->st_strsize = stp->st_fullstrsize = stp->st_nextoff = 1;
172 stp->st_flags = flags;
173 if ((stp->st_flags & FLG_STTAB_COMPRESS) == 0)
174 return (stp);
176 if ((stp->st_lentree = calloc(sizeof (*stp->st_lentree), 1)) == NULL)
179 avl_create(stp->st_lentree, &avl_len_compare, sizeof (LenNode),
182 return (stp);
196 st_insert(Str_tbl *stp, const char *str)
206 assert((stp->st_flags & FLG_STTAB_COOKED) == 0);
215 stp->st_fullstrsize += len + 1;
216 stp->st_strcnt++;
218 if ((stp->st_flags & FLG_STTAB_COMPRESS) == 0)
227 if ((lnp = avl_find(stp->st_lentree, &ln, &where)) == NULL) {
231 avl_insert(stp->st_lentree, lnp, where);
262 st_delstring(Str_tbl *stp, const char *str)
271 assert((stp->st_flags & FLG_STTAB_COOKED) == 0);
274 stp->st_fullstrsize -= len + 1;
276 if ((stp->st_flags & FLG_STTAB_COMPRESS) == 0)
283 if ((lnp = avl_find(stp->st_lentree, &ln, 0)) != NULL) {
306 st_destroy(Str_tbl *stp)
315 for (mstr = stp->st_mstrlist, pmstr = 0; mstr;
324 if (stp->st_hashbcks) {
325 for (i = 0; i < stp->st_hbckcnt; i++) {
326 for (sthash = stp->st_hashbcks[i], psthash = 0;
335 free(stp->st_hashbcks);
337 free(stp);
349 st_setstring(Str_tbl *stp, const char *str, size_t *stoff)
360 assert(stp->st_strbuf);
362 assert(stp->st_flags & FLG_STTAB_COOKED);
372 if ((stp->st_flags & FLG_STTAB_COMPRESS) == 0) {
376 _stoff = stp->st_nextoff;
380 if ((_stoff + stlen) > stp->st_fullstrsize)
382 memcpy(stp->st_strbuf + _stoff, str, stlen);
384 stp->st_nextoff += stlen;
397 for (sthash = stp->st_hashbcks[hashval % stp->st_hbckcnt]; sthash;
423 mstr->sm_stroff = stp->st_nextoff;
428 if ((mstr->sm_stroff + mstrlen) > stp->st_fullstrsize)
431 (void) memcpy(stp->st_strbuf + mstr->sm_stroff,
433 stp->st_nextoff += mstrlen;
446 st_hash_insert(Str_tbl *stp, const char *str, size_t len)
450 uint_t bckcnt = stp->st_hbckcnt;
451 Str_hash **hashbcks = stp->st_hashbcks;
517 mstr->sm_next = stp->st_mstrlist;
518 stp->st_mstrlist = mstr;
519 stp->st_strsize += len + 1;
527 stp->st_strsize += len - mstr->sm_strlen;
552 st_getstrtab_sz(Str_tbl *stp)
554 assert(stp->st_fullstrsize > 0);
556 if ((stp->st_flags & FLG_STTAB_COMPRESS) == 0) {
557 stp->st_flags |= FLG_STTAB_COOKED;
558 return (stp->st_fullstrsize);
561 if ((stp->st_flags & FLG_STTAB_COOKED) == 0) {
565 stp->st_flags |= FLG_STTAB_COOKED;
570 stp->st_hbckcnt = findprime(stp->st_strcnt);
571 if ((stp->st_hashbcks = calloc(sizeof (*stp->st_hashbcks),
572 stp->st_hbckcnt)) == NULL)
579 if ((lnp = avl_first(stp->st_lentree)) == NULL) {
584 if (avl_numnodes(stp->st_lentree) == 0) {
585 assert(stp->st_strsize == 1);
586 return (stp->st_strsize);
601 if (st_hash_insert(stp, snp->sn_str,
624 lnp = AVL_NEXT(stp->st_lentree, lnp);
635 while ((lnp = avl_destroy_nodes(stp->st_lentree,
638 avl_destroy(stp->st_lentree);
639 free(stp->st_lentree);
640 stp->st_lentree = 0;
643 assert(stp->st_strsize > 0);
644 assert(stp->st_fullstrsize >= stp->st_strsize);
646 return (stp->st_strsize);
653 st_getstrbuf(Str_tbl *stp)
655 return (stp->st_strbuf);
659 st_setstrbuf(Str_tbl *stp, char *stbuf, size_t bufsize)
661 assert(stp->st_flags & FLG_STTAB_COOKED);
663 if ((stp->st_flags & FLG_STTAB_COMPRESS) == 0) {
664 if (bufsize < stp->st_fullstrsize)
667 if (bufsize < stp->st_strsize)
671 stp->st_strbuf = stbuf;