Lines Matching defs:dhp

611 dt_idhash_populate(dt_idhash_t *dhp)
613 const dt_ident_t *idp = dhp->dh_tmpl;
615 dhp->dh_tmpl = NULL; /* clear dh_tmpl first to avoid recursion */
616 dt_dprintf("populating %s idhash from %p\n", dhp->dh_name, (void *)idp);
619 if (dt_idhash_insert(dhp, idp->di_name,
631 dt_idhash_t *dhp;
639 if ((dhp = malloc(size)) == NULL)
642 bzero(dhp, size);
643 dhp->dh_name = name;
644 dhp->dh_tmpl = tmpl;
645 dhp->dh_nextid = min;
646 dhp->dh_minid = min;
647 dhp->dh_maxid = max;
648 dhp->dh_hashsz = _dtrace_strbuckets;
650 return (dhp);
663 dt_idhash_destroy(dt_idhash_t *dhp)
668 for (i = 0; i < dhp->dh_hashsz; i++) {
669 for (idp = dhp->dh_hash[i]; idp != NULL; idp = next) {
675 for (i = 0; i < dhp->dh_hashsz; i++) {
676 for (idp = dhp->dh_hash[i]; idp != NULL; idp = next) {
683 free(dhp);
687 dt_idhash_update(dt_idhash_t *dhp)
689 uint_t nextid = dhp->dh_minid;
693 for (i = 0; i < dhp->dh_hashsz; i++) {
694 for (idp = dhp->dh_hash[i]; idp != NULL; idp = idp->di_next) {
706 dhp->dh_nextid = nextid;
710 dt_idhash_lookup(dt_idhash_t *dhp, const char *name)
713 ulong_t h = dt_strtab_hash(name, &len) % dhp->dh_hashsz;
716 if (dhp->dh_tmpl != NULL)
717 dt_idhash_populate(dhp); /* fill hash w/ initial population */
719 for (idp = dhp->dh_hash[h]; idp != NULL; idp = idp->di_next) {
728 dt_idhash_nextid(dt_idhash_t *dhp, uint_t *p)
730 if (dhp->dh_nextid >= dhp->dh_maxid)
733 *p = dhp->dh_nextid++;
738 dt_idhash_size(const dt_idhash_t *dhp)
740 return (dhp->dh_nelems);
744 dt_idhash_name(const dt_idhash_t *dhp)
746 return (dhp->dh_name);
750 dt_idhash_insert(dt_idhash_t *dhp, const char *name, ushort_t kind,
757 if (dhp->dh_tmpl != NULL)
758 dt_idhash_populate(dhp); /* fill hash w/ initial population */
766 h = dt_strtab_hash(name, NULL) % dhp->dh_hashsz;
767 idp->di_next = dhp->dh_hash[h];
769 dhp->dh_hash[h] = idp;
770 dhp->dh_nelems++;
772 if (dhp->dh_defer != NULL)
773 dhp->dh_defer(dhp, idp);
779 dt_idhash_xinsert(dt_idhash_t *dhp, dt_ident_t *idp)
783 if (dhp->dh_tmpl != NULL)
784 dt_idhash_populate(dhp); /* fill hash w/ initial population */
786 h = dt_strtab_hash(idp->di_name, NULL) % dhp->dh_hashsz;
787 idp->di_next = dhp->dh_hash[h];
790 dhp->dh_hash[h] = idp;
791 dhp->dh_nelems++;
793 if (dhp->dh_defer != NULL)
794 dhp->dh_defer(dhp, idp);
798 dt_idhash_delete(dt_idhash_t *dhp, dt_ident_t *key)
801 ulong_t h = dt_strtab_hash(key->di_name, &len) % dhp->dh_hashsz;
802 dt_ident_t **pp = &dhp->dh_hash[h];
805 for (idp = dhp->dh_hash[h]; idp != NULL; idp = idp->di_next) {
815 assert(dhp->dh_nelems != 0);
816 dhp->dh_nelems--;
835 dt_idhash_iter(dt_idhash_t *dhp, dt_idhash_f *func, void *data)
842 if (dhp->dh_tmpl != NULL)
843 dt_idhash_populate(dhp); /* fill hash w/ initial population */
845 n = dhp->dh_nelems;
848 for (i = 0, j = 0; i < dhp->dh_hashsz; i++) {
849 for (idp = dhp->dh_hash[i]; idp != NULL; idp = idp->di_next)
853 qsort(ids, dhp->dh_nelems, sizeof (dt_ident_t *), dt_idhash_comp);
856 if ((rv = func(dhp, ids[i], data)) != 0)
866 dt_idhash_t *dhp;
869 for (dhp = dt_list_prev(&sp->dids_list);
870 dhp != NULL; dhp = dt_list_prev(dhp)) {
871 if ((idp = dt_idhash_lookup(dhp, name)) != NULL)
879 dt_idstack_push(dt_idstack_t *sp, dt_idhash_t *dhp)
881 dt_list_append(&sp->dids_list, dhp);
885 dt_idstack_pop(dt_idstack_t *sp, dt_idhash_t *dhp)
887 assert(dt_list_prev(&sp->dids_list) == dhp);
888 dt_list_delete(&sp->dids_list, dhp);