Lines Matching defs:dhp

616 dt_idhash_populate(dt_idhash_t *dhp)
618 const dt_ident_t *idp = dhp->dh_tmpl;
620 dhp->dh_tmpl = NULL; /* clear dh_tmpl first to avoid recursion */
621 dt_dprintf("populating %s idhash from %p\n", dhp->dh_name, (void *)idp);
624 if (dt_idhash_insert(dhp, idp->di_name,
636 dt_idhash_t *dhp;
644 if ((dhp = malloc(size)) == NULL)
647 bzero(dhp, size);
648 dhp->dh_name = name;
649 dhp->dh_tmpl = tmpl;
650 dhp->dh_nextid = min;
651 dhp->dh_minid = min;
652 dhp->dh_maxid = max;
653 dhp->dh_hashsz = _dtrace_strbuckets;
655 return (dhp);
668 dt_idhash_destroy(dt_idhash_t *dhp)
673 for (i = 0; i < dhp->dh_hashsz; i++) {
674 for (idp = dhp->dh_hash[i]; idp != NULL; idp = next) {
680 for (i = 0; i < dhp->dh_hashsz; i++) {
681 for (idp = dhp->dh_hash[i]; idp != NULL; idp = next) {
688 free(dhp);
692 dt_idhash_update(dt_idhash_t *dhp)
694 uint_t nextid = dhp->dh_minid;
698 for (i = 0; i < dhp->dh_hashsz; i++) {
699 for (idp = dhp->dh_hash[i]; idp != NULL; idp = idp->di_next) {
711 dhp->dh_nextid = nextid;
715 dt_idhash_lookup(dt_idhash_t *dhp, const char *name)
718 ulong_t h = dt_strtab_hash(name, &len) % dhp->dh_hashsz;
721 if (dhp->dh_tmpl != NULL)
722 dt_idhash_populate(dhp); /* fill hash w/ initial population */
724 for (idp = dhp->dh_hash[h]; idp != NULL; idp = idp->di_next) {
733 dt_idhash_nextid(dt_idhash_t *dhp, uint_t *p)
735 if (dhp->dh_nextid >= dhp->dh_maxid)
738 *p = dhp->dh_nextid++;
743 dt_idhash_size(const dt_idhash_t *dhp)
745 return (dhp->dh_nelems);
749 dt_idhash_name(const dt_idhash_t *dhp)
751 return (dhp->dh_name);
755 dt_idhash_insert(dt_idhash_t *dhp, const char *name, ushort_t kind,
762 if (dhp->dh_tmpl != NULL)
763 dt_idhash_populate(dhp); /* fill hash w/ initial population */
771 h = dt_strtab_hash(name, NULL) % dhp->dh_hashsz;
772 idp->di_next = dhp->dh_hash[h];
774 dhp->dh_hash[h] = idp;
775 dhp->dh_nelems++;
777 if (dhp->dh_defer != NULL)
778 dhp->dh_defer(dhp, idp);
784 dt_idhash_xinsert(dt_idhash_t *dhp, dt_ident_t *idp)
788 if (dhp->dh_tmpl != NULL)
789 dt_idhash_populate(dhp); /* fill hash w/ initial population */
791 h = dt_strtab_hash(idp->di_name, NULL) % dhp->dh_hashsz;
792 idp->di_next = dhp->dh_hash[h];
795 dhp->dh_hash[h] = idp;
796 dhp->dh_nelems++;
798 if (dhp->dh_defer != NULL)
799 dhp->dh_defer(dhp, idp);
803 dt_idhash_delete(dt_idhash_t *dhp, dt_ident_t *key)
806 ulong_t h = dt_strtab_hash(key->di_name, &len) % dhp->dh_hashsz;
807 dt_ident_t **pp = &dhp->dh_hash[h];
810 for (idp = dhp->dh_hash[h]; idp != NULL; idp = idp->di_next) {
820 assert(dhp->dh_nelems != 0);
821 dhp->dh_nelems--;
840 dt_idhash_iter(dt_idhash_t *dhp, dt_idhash_f *func, void *data)
847 if (dhp->dh_tmpl != NULL)
848 dt_idhash_populate(dhp); /* fill hash w/ initial population */
850 n = dhp->dh_nelems;
853 for (i = 0, j = 0; i < dhp->dh_hashsz; i++) {
854 for (idp = dhp->dh_hash[i]; idp != NULL; idp = idp->di_next)
858 qsort(ids, dhp->dh_nelems, sizeof (dt_ident_t *), dt_idhash_comp);
861 if ((rv = func(dhp, ids[i], data)) != 0)
871 dt_idhash_t *dhp;
874 for (dhp = dt_list_prev(&sp->dids_list);
875 dhp != NULL; dhp = dt_list_prev(dhp)) {
876 if ((idp = dt_idhash_lookup(dhp, name)) != NULL)
884 dt_idstack_push(dt_idstack_t *sp, dt_idhash_t *dhp)
886 dt_list_append(&sp->dids_list, dhp);
890 dt_idstack_pop(dt_idstack_t *sp, dt_idhash_t *dhp)
892 assert(dt_list_prev(&sp->dids_list) == dhp);
893 dt_list_delete(&sp->dids_list, dhp);