void nmg_visit(const uint32_t *magicp, const struct nmg_visit_handlers *htab, void *state) /* Handler's private state */ { switch (*magicp) { default: bu_log("nmg_visit() Can't visit %s directly\n", bu_identify_magic(*magicp)); bu_bomb("nmg_visit()\n"); /* NOTREACHED */ case NMG_MODEL_MAGIC: nmg_visit_model((struct model *)magicp, htab, state); break; case NMG_REGION_MAGIC: nmg_visit_region((struct nmgregion *)magicp, htab, state); break; case NMG_SHELL_MAGIC: nmg_visit_shell((struct shell *)magicp, htab, state); break; case NMG_FACEUSE_MAGIC: nmg_visit_faceuse((struct faceuse *)magicp, htab, state); break; case NMG_LOOPUSE_MAGIC: nmg_visit_loopuse((struct loopuse *)magicp, htab, state); break; case NMG_EDGEUSE_MAGIC: nmg_visit_edgeuse((struct edgeuse *)magicp, htab, state); break; case NMG_VERTEXUSE_MAGIC: nmg_visit_vertexuse((struct vertexuse *)magicp, htab, state); break; } }
/** * B U _ P R _ P T B L * * Print a bu_ptbl array for inspection. */ void bu_pr_ptbl(const char *title, const struct bu_ptbl *tbl, int verbose) { register long **lp; BU_CK_PTBL(tbl); bu_log("%s: bu_ptbl array with %d entries\n", title, tbl->end ); if ( !verbose ) return; /* Go in ascending order */ for ( lp = (long **)BU_PTBL_BASEADDR(tbl); lp <= (long **)BU_PTBL_LASTADDR(tbl); lp++ ) { if ( *lp == 0 ) { bu_log(" %.8x NULL entry\n", *lp); continue; } bu_log(" %.8x %s\n", *lp, bu_identify_magic(**lp) ); } }
/** * Given a pointer to some NMG data structure, search the 4 * classification lists to determine its classification. (XXX In the * future, this should be done with one big array). Then, return the * action code for an item of that classification. */ HIDDEN int nmg_eval_action(uint32_t *ptr, register struct nmg_bool_state *bs) { register int ret; register int nmg_class; int index; BN_CK_TOL(bs->bs_tol); index = nmg_index_of_struct(ptr); if (bs->bs_isA) { if (NMG_INDEX_VALUE(bs->bs_classtab[NMG_CLASS_AinB], index)) { nmg_class = NMG_CLASS_AinB; ret = bs->bs_actions[NMG_CLASS_AinB]; goto out; } if (NMG_INDEX_VALUE(bs->bs_classtab[NMG_CLASS_AonBshared], index)) { nmg_class = NMG_CLASS_AonBshared; ret = bs->bs_actions[NMG_CLASS_AonBshared]; goto out; } if (NMG_INDEX_VALUE(bs->bs_classtab[NMG_CLASS_AonBanti], index)) { nmg_class = NMG_CLASS_AonBanti; ret = bs->bs_actions[NMG_CLASS_AonBanti]; goto out; } if (NMG_INDEX_VALUE(bs->bs_classtab[NMG_CLASS_AoutB], index)) { nmg_class = NMG_CLASS_AoutB; ret = bs->bs_actions[NMG_CLASS_AoutB]; goto out; } bu_log("nmg_eval_action(ptr=%p) %s has no A classification, retaining\n", (void *)ptr, bu_identify_magic(*((uint32_t *)ptr))); nmg_class = NMG_CLASS_BAD; ret = BACTION_RETAIN; goto out; } /* is B */ if (NMG_INDEX_VALUE(bs->bs_classtab[NMG_CLASS_BinA], index)) { nmg_class = NMG_CLASS_BinA; ret = bs->bs_actions[NMG_CLASS_BinA]; goto out; } if (NMG_INDEX_VALUE(bs->bs_classtab[NMG_CLASS_BonAshared], index)) { nmg_class = NMG_CLASS_BonAshared; ret = bs->bs_actions[NMG_CLASS_BonAshared]; goto out; } if (NMG_INDEX_VALUE(bs->bs_classtab[NMG_CLASS_BonAanti], index)) { nmg_class = NMG_CLASS_BonAanti; ret = bs->bs_actions[NMG_CLASS_BonAanti]; goto out; } if (NMG_INDEX_VALUE(bs->bs_classtab[NMG_CLASS_BoutA], index)) { nmg_class = NMG_CLASS_BoutA; ret = bs->bs_actions[NMG_CLASS_BoutA]; goto out; } bu_log("nmg_eval_action(ptr=%p) %s has no B classification, retaining\n", (void *)ptr, bu_identify_magic(*((uint32_t *)ptr))); nmg_class = NMG_CLASS_BAD; ret = BACTION_RETAIN; out: if (RTG.NMG_debug & DEBUG_BOOLEVAL) { bu_log("nmg_eval_action(ptr=%p) index=%d %s %s %s %s\n", (void *)ptr, index, bs->bs_isA ? "A" : "B", bu_identify_magic(*((uint32_t *)ptr)), nmg_class_name(nmg_class), nmg_baction_names[ret]); } return ret; }