Lines Matching defs:dhp
628 dt_idhash_populate(dt_idhash_t *dhp)
630 const dt_ident_t *idp = dhp->dh_tmpl;
632 dhp->dh_tmpl = NULL; /* clear dh_tmpl first to avoid recursion */
633 dt_dprintf("populating %s idhash from %p\n", dhp->dh_name, (void *)idp);
636 if (dt_idhash_insert(dhp, idp->di_name,
648 dt_idhash_t *dhp;
656 if ((dhp = malloc(size)) == NULL)
659 bzero(dhp, size);
660 dhp->dh_name = name;
661 dhp->dh_tmpl = tmpl;
662 dhp->dh_nextid = min;
663 dhp->dh_minid = min;
664 dhp->dh_maxid = max;
665 dhp->dh_hashsz = _dtrace_strbuckets;
667 return (dhp);
680 dt_idhash_destroy(dt_idhash_t *dhp)
685 for (i = 0; i < dhp->dh_hashsz; i++) {
686 for (idp = dhp->dh_hash[i]; idp != NULL; idp = next) {
692 for (i = 0; i < dhp->dh_hashsz; i++) {
693 for (idp = dhp->dh_hash[i]; idp != NULL; idp = next) {
700 free(dhp);
704 dt_idhash_update(dt_idhash_t *dhp)
706 uint_t nextid = dhp->dh_minid;
710 for (i = 0; i < dhp->dh_hashsz; i++) {
711 for (idp = dhp->dh_hash[i]; idp != NULL; idp = idp->di_next) {
723 dhp->dh_nextid = nextid;
727 dt_idhash_lookup(dt_idhash_t *dhp, const char *name)
730 ulong_t h = dt_strtab_hash(name, &len) % dhp->dh_hashsz;
733 if (dhp->dh_tmpl != NULL)
734 dt_idhash_populate(dhp); /* fill hash w/ initial population */
736 for (idp = dhp->dh_hash[h]; idp != NULL; idp = idp->di_next) {
745 dt_idhash_nextid(dt_idhash_t *dhp, uint_t *p)
747 if (dhp->dh_nextid >= dhp->dh_maxid)
750 *p = dhp->dh_nextid++;
755 dt_idhash_size(const dt_idhash_t *dhp)
757 return (dhp->dh_nelems);
761 dt_idhash_name(const dt_idhash_t *dhp)
763 return (dhp->dh_name);
767 dt_idhash_insert(dt_idhash_t *dhp, const char *name, ushort_t kind,
774 if (dhp->dh_tmpl != NULL)
775 dt_idhash_populate(dhp); /* fill hash w/ initial population */
783 h = dt_strtab_hash(name, NULL) % dhp->dh_hashsz;
784 idp->di_next = dhp->dh_hash[h];
786 dhp->dh_hash[h] = idp;
787 dhp->dh_nelems++;
789 if (dhp->dh_defer != NULL)
790 dhp->dh_defer(dhp, idp);
796 dt_idhash_xinsert(dt_idhash_t *dhp, dt_ident_t *idp)
800 if (dhp->dh_tmpl != NULL)
801 dt_idhash_populate(dhp); /* fill hash w/ initial population */
803 h = dt_strtab_hash(idp->di_name, NULL) % dhp->dh_hashsz;
804 idp->di_next = dhp->dh_hash[h];
807 dhp->dh_hash[h] = idp;
808 dhp->dh_nelems++;
810 if (dhp->dh_defer != NULL)
811 dhp->dh_defer(dhp, idp);
815 dt_idhash_delete(dt_idhash_t *dhp, dt_ident_t *key)
818 ulong_t h = dt_strtab_hash(key->di_name, &len) % dhp->dh_hashsz;
819 dt_ident_t **pp = &dhp->dh_hash[h];
822 for (idp = dhp->dh_hash[h]; idp != NULL; idp = idp->di_next) {
832 assert(dhp->dh_nelems != 0);
833 dhp->dh_nelems--;
852 dt_idhash_iter(dt_idhash_t *dhp, dt_idhash_f *func, void *data)
859 if (dhp->dh_tmpl != NULL)
860 dt_idhash_populate(dhp); /* fill hash w/ initial population */
862 n = dhp->dh_nelems;
865 for (i = 0, j = 0; i < dhp->dh_hashsz; i++) {
866 for (idp = dhp->dh_hash[i]; idp != NULL; idp = idp->di_next)
870 qsort(ids, dhp->dh_nelems, sizeof (dt_ident_t *), dt_idhash_comp);
873 if ((rv = func(dhp, ids[i], data)) != 0)
883 dt_idhash_t *dhp;
886 for (dhp = dt_list_prev(&sp->dids_list);
887 dhp != NULL; dhp = dt_list_prev(dhp)) {
888 if ((idp = dt_idhash_lookup(dhp, name)) != NULL)
896 dt_idstack_push(dt_idstack_t *sp, dt_idhash_t *dhp)
898 dt_list_append(&sp->dids_list, dhp);
902 dt_idstack_pop(dt_idstack_t *sp, dt_idhash_t *dhp)
904 assert(dt_list_prev(&sp->dids_list) == dhp);
905 dt_list_delete(&sp->dids_list, dhp);