Lines Matching refs:stp

161 	Str_tbl	*stp;
163 if ((stp = calloc(sizeof (Str_tbl), 1)) == NULL)
169 stp->st_strsize = stp->st_fullstrsize = stp->st_nextoff = 1;
174 stp->st_flags = flags;
175 if ((stp->st_flags & FLG_STTAB_COMPRESS) == 0)
176 return (stp);
178 if ((stp->st_lentree = calloc(sizeof (avl_tree_t), 1)) == NULL)
181 avl_create(stp->st_lentree, &avl_len_compare, sizeof (LenNode),
184 return (stp);
198 st_insert(Str_tbl *stp, const char *str)
208 assert((stp->st_flags & FLG_STTAB_COOKED) == 0);
217 stp->st_fullstrsize += len + 1;
218 stp->st_strcnt++;
220 if ((stp->st_flags & FLG_STTAB_COMPRESS) == 0)
229 if ((lnp = avl_find(stp->st_lentree, &ln, &where)) == NULL) {
233 avl_insert(stp->st_lentree, lnp, where);
263 st_delstring(Str_tbl *stp, const char *str)
272 assert((stp->st_flags & FLG_STTAB_COOKED) == 0);
275 stp->st_fullstrsize -= len + 1;
277 if ((stp->st_flags & FLG_STTAB_COMPRESS) == 0)
284 if ((lnp = avl_find(stp->st_lentree, &ln, 0)) != NULL) {
307 st_destroy(Str_tbl *stp)
316 for (mstr = stp->st_mstrlist, pmstr = 0; mstr;
325 if (stp->st_hashbcks) {
326 for (i = 0; i < stp->st_hbckcnt; i++) {
327 for (sthash = stp->st_hashbcks[i], psthash = 0;
336 free(stp->st_hashbcks);
338 free(stp);
350 st_setstring(Str_tbl *stp, const char *str, size_t *stoff)
361 assert(stp->st_strbuf);
363 assert(stp->st_flags & FLG_STTAB_COOKED);
373 if ((stp->st_flags & FLG_STTAB_COMPRESS) == 0) {
377 _stoff = stp->st_nextoff;
381 if ((_stoff + stlen) > stp->st_fullstrsize)
383 memcpy(stp->st_strbuf + _stoff, str, stlen);
385 stp->st_nextoff += stlen;
398 for (sthash = stp->st_hashbcks[hashval % stp->st_hbckcnt]; sthash;
424 mstr->sm_stroff = stp->st_nextoff;
429 if ((mstr->sm_stroff + mstrlen) > stp->st_fullstrsize)
432 (void) memcpy(stp->st_strbuf + mstr->sm_stroff,
434 stp->st_nextoff += mstrlen;
447 st_hash_insert(Str_tbl *stp, const char *str, size_t len)
451 uint_t bckcnt = stp->st_hbckcnt;
452 Str_hash **hashbcks = stp->st_hashbcks;
518 mstr->sm_next = stp->st_mstrlist;
519 stp->st_mstrlist = mstr;
520 stp->st_strsize += len + 1;
528 stp->st_strsize += len - mstr->sm_strlen;
553 st_getstrtab_sz(Str_tbl *stp)
555 assert(stp->st_fullstrsize > 0);
557 if ((stp->st_flags & FLG_STTAB_COMPRESS) == 0) {
558 stp->st_flags |= FLG_STTAB_COOKED;
559 return (stp->st_fullstrsize);
562 if ((stp->st_flags & FLG_STTAB_COOKED) == 0) {
566 stp->st_flags |= FLG_STTAB_COOKED;
571 stp->st_hbckcnt = findprime(stp->st_strcnt);
572 if ((stp->st_hashbcks =
573 calloc(sizeof (Str_hash), stp->st_hbckcnt)) == NULL)
580 if ((lnp = avl_first(stp->st_lentree)) == NULL) {
585 if (avl_numnodes(stp->st_lentree) == 0) {
586 assert(stp->st_strsize == 1);
587 return (stp->st_strsize);
602 if (st_hash_insert(stp, snp->sn_str,
625 lnp = AVL_NEXT(stp->st_lentree, lnp);
636 while ((lnp = avl_destroy_nodes(stp->st_lentree,
639 avl_destroy(stp->st_lentree);
640 free(stp->st_lentree);
641 stp->st_lentree = 0;
644 assert(stp->st_strsize > 0);
645 assert(stp->st_fullstrsize >= stp->st_strsize);
647 return (stp->st_strsize);
654 st_getstrbuf(Str_tbl *stp)
656 return (stp->st_strbuf);
660 st_setstrbuf(Str_tbl *stp, char *stbuf, size_t bufsize)
662 assert(stp->st_flags & FLG_STTAB_COOKED);
664 if ((stp->st_flags & FLG_STTAB_COMPRESS) == 0) {
665 if (bufsize < stp->st_fullstrsize)
668 if (bufsize < stp->st_strsize)
672 stp->st_strbuf = stbuf;