本文整理汇总了C++中bu_free函数的典型用法代码示例。如果您正苦于以下问题:C++ bu_free函数的具体用法?C++ bu_free怎么用?C++ bu_free使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了bu_free函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: db_dirdelete
int
db_dirdelete(struct db_i *dbip, struct directory *dp)
{
struct directory *findp;
struct directory **headp;
RT_CK_DBI(dbip);
RT_CK_DIR(dp);
headp = &(dbip->dbi_Head[db_dirhash(dp->d_namep)]);
if (dp->d_flags & RT_DIR_INMEM) {
if (dp->d_un.ptr != NULL)
bu_free(dp->d_un.ptr, "db_dirdelete() inmem ptr");
}
if (*headp == dp) {
RT_DIR_FREE_NAMEP(dp); /* frees d_namep */
*headp = dp->d_forw;
/* Put 'dp' back on the freelist */
dp->d_forw = rt_uniresource.re_directory_hd;
rt_uniresource.re_directory_hd = dp;
return 0;
}
for (findp = *headp; findp != RT_DIR_NULL; findp = findp->d_forw) {
if (findp->d_forw != dp)
continue;
RT_DIR_FREE_NAMEP(dp); /* frees d_namep */
findp->d_forw = dp->d_forw;
/* Put 'dp' back on the freelist */
dp->d_forw = rt_uniresource.re_directory_hd;
rt_uniresource.re_directory_hd = dp;
return 0;
}
return -1;
}
示例2: bw_write
int
bw_write(icv_image_t *bif, const char *filename)
{
unsigned char *data;
FILE *fp;
size_t ret, size;
if (bif->color_space == ICV_COLOR_SPACE_RGB) {
icv_rgb2gray_ntsc(bif);
} else if (bif->color_space != ICV_COLOR_SPACE_GRAY) {
bu_log("bw_write : Color Space conflict");
return -1;
}
data = data2uchar(bif);
size = bif->height*bif->width;
if (filename == NULL) {
fp = stdout;
} else {
fp = fopen(filename, "wb");
if (fp == NULL) {
bu_log("bw_write: Cannot open file for saving\n");
return -1;
}
}
ret = fwrite(data, 1, size, fp);
fclose(fp);
bu_free(data, "bw_write : Unsigned Char data");
if (ret != size) {
bu_log("bw_write : Short Write\n");
return -1;
}
return 0;
}
示例3: process_point
void
process_point(point_line_t *plt) {
static int code_state = INT32_MAX;
static int points = 0;
static point_line_t *plta = NULL;
if (!plt) {
printf("WARNING: Unexpected call to process_point with a NULL point structure\n");
return;
}
/* state change, we're either starting or ending */
if (code_state != plt->code) {
if (points > 0) {
process_multi_group(&plta, points, TOL);
printf("END OF BLOCK %d\n", code_state);
/* finish up this batch */
bu_free((genptr_t)plta, "end point_line_t group");
plta = NULL;
}
if (plt->type)
printf("BEGIN OF BLOCK %s (%d)\n", plt->type, plt->code);
/* get ready for the new batch */
code_state = plt->code;
points = 0;
}
/* allocate room for the new point */
if (!plta)
plta = (point_line_t *) bu_malloc(sizeof(point_line_t), "begin point_line_t group");
else
plta = (point_line_t *) bu_realloc(plta, sizeof(point_line_t) * (points + 1), "add point_line_t");
COPY_POINT_LINE_T(plta[points], *plt);
points++;
}
示例4: process_triangulation
static int
process_triangulation(struct db_tree_state *tsp, const struct db_full_path *pathp, struct _ged_client_data *dgcdp)
{
int result = 1;
if (!BU_SETJUMP) {
/* try */
nmg_triangulate_model(*tsp->ts_m, tsp->ts_tol);
result = 0;
} else {
/* catch */
char *sofar = db_path_to_string(pathp);
bu_vls_printf(dgcdp->gedp->ged_result_str, "WARNING: Triangulation of %s failed!\n", sofar);
bu_free((void *)sofar, "path string");
} BU_UNSETJUMP;
return result;
}
示例5: diff_free_result
void
diff_free_result(struct diff_result *result)
{
unsigned int i = 0;
if (result->obj_name) {
bu_free(result->obj_name, "free name copy in diff result");
}
BU_PUT(result->diff_tol, struct bn_tol);
for (i = 0; i < BU_PTBL_LEN(result->param_diffs); i++) {
struct diff_avp *avp = (struct diff_avp *)BU_PTBL_GET(result->param_diffs, i);
diff_free_avp(avp);
BU_PUT(avp, struct diff_avp);
}
bu_ptbl_free(result->param_diffs);
BU_PUT(result->param_diffs, struct bu_ptbl);
for (i = 0; i < BU_PTBL_LEN(result->attr_diffs); i++) {
struct diff_avp *avp = (struct diff_avp *)BU_PTBL_GET(result->attr_diffs, i);
diff_free_avp(avp);
BU_PUT(avp, struct diff_avp);
}
bu_ptbl_free(result->attr_diffs);
BU_PUT(result->attr_diffs, struct bu_ptbl);
}
示例6: wdb_eval_bool
HIDDEN union tree *
wdb_eval_bool(struct bu_list *hp)
{
int done=0;
union tree *final_tree;
struct tokens *tok;
while (done != 1) {
wdb_do_inter(hp);
wdb_do_union_subtr(hp);
done = wdb_do_paren(hp);
}
if (done == 1) {
tok = BU_LIST_NEXT(tokens, hp);
final_tree = tok->tp;
BU_LIST_DEQUEUE(&tok->l);
bu_free((char *)tok, "tok");
return(final_tree);
}
return (union tree *)NULL;
}
示例7: process_triangulation
static void
process_triangulation(struct nmgregion *r, const struct db_full_path *pathp, struct db_tree_state *tsp)
{
if (!BU_SETJUMP) {
/* try */
/* Write the facetized region to the output file */
output_nmg(r, pathp, tsp->ts_regionid, tsp->ts_gmater);
} else {
/* catch */
char *sofar;
sofar = db_path_to_string(pathp);
bu_log("FAILED in triangulator: %s\n", sofar);
bu_free((char *)sofar, "sofar");
/* Sometimes the NMG library adds debugging bits when
* it detects an internal error, before bombing out.
*/
RTG.NMG_debug = NMG_debug; /* restore mode */
/* Release any intersector 2d tables */
nmg_isect2d_final_cleanup();
/* Get rid of (m)any other intermediate structures */
if ((*tsp->ts_m)->magic == NMG_MODEL_MAGIC) {
nmg_km(*tsp->ts_m);
} else {
bu_log("WARNING: tsp->ts_m pointer corrupted, ignoring it.\n");
}
/* Now, make a new, clean model structure for next pass. */
*tsp->ts_m = nmg_mm();
} BU_UNSETJUMP;
}
示例8: bu_dirname
/**
* B U _ D I R N A M E
*
* Given a filesystem pathname, return a pointer to a dynamic string
* which is the parent directory of that file/directory.
*
* /usr/dir/file /usr/dir
* @n /usr/dir/ /usr
* @n /usr/file /usr
* @n /usr/ /
* @n /usr /
* @n / /
* @n . .
* @n .. .
* @n usr .
* @n a/b a
* @n a/ .
* @n ../a/b ../a
*/
char *
bu_dirname(const char *cp)
{
char *ret;
char *slash;
int len;
/* Special cases */
if ( cp == NULL ) return bu_strdup(".");
if ( strcmp( cp, "/" ) == 0 )
return bu_strdup("/");
if ( strcmp( cp, "." ) == 0 ||
strcmp( cp, ".." ) == 0 ||
strrchr(cp, '/') == NULL )
return bu_strdup(".");
/* Make a duplicate copy of the string, and shorten it in place */
ret = bu_strdup(cp);
/* A trailing slash doesn't count */
len = strlen(ret);
if ( ret[len-1] == '/' ) ret[len-1] = '\0';
/* If no slashes remain, return "." */
if ( (slash = strrchr(ret, '/')) == NULL ) {
bu_free( ret, "bu_dirname" );
return bu_strdup(".");
}
/* Remove trailing slash, unless it's at front */
if ( slash == ret )
ret[1] = '\0'; /* ret == "/" */
else
*slash = '\0';
return ret;
}
示例9: nmg_to_psurf
static void
nmg_to_psurf(struct nmgregion *r, FILE *fp_psurf)
/* NMG region to be converted. */
/* Jack format file to write vertex list to. */
{
int i;
int *map; /* map from v->index to Jack vert # */
struct bu_ptbl vtab; /* vertex table */
map = (int *)bu_calloc(r->m_p->maxindex, sizeof(int *), "Jack vert map");
/* Built list of vertex structs */
nmg_vertex_tabulate( &vtab, &r->l.magic );
/* XXX What to do if 0 vertices? */
/* Print list of unique vertices and convert from mm to cm. */
for (i = 0; i < BU_PTBL_END(&vtab); i++) {
struct vertex *v;
register struct vertex_g *vg;
v = (struct vertex *)BU_PTBL_GET(&vtab, i);
NMG_CK_VERTEX(v);
vg = v->vg_p;
NMG_CK_VERTEX_G(vg);
NMG_INDEX_ASSIGN( map, v, i+1 ); /* map[v->index] = i+1 */
fprintf(fp_psurf, "%f\t%f\t%f\n",
vg->coord[X] / 10.,
vg->coord[Y] / 10.,
vg->coord[Z] / 10.);
}
fprintf(fp_psurf, ";;\n");
jack_faces(r, fp_psurf, map);
bu_ptbl( &vtab, BU_PTBL_FREE, 0 );
bu_free( (char *)map, "Jack vert map" );
}
示例10: rt_nurb_region_from_srf
struct face_g_snurb *
rt_nurb_region_from_srf(const struct face_g_snurb *srf, int dir, fastf_t param1, fastf_t param2, struct resource *res)
{
register int i;
struct face_g_snurb *region;
struct knot_vector new_knots;
fastf_t *knot_vec = NULL;
size_t maxorder = FMAX(srf->order[0], srf->order[1]);
knot_vec = (fastf_t *)bu_calloc(maxorder * 2, sizeof(fastf_t), "knot vector");
/* Build the new knot vector in a local array, which gets copied
* later in rt_nurb_s_refine(). */
new_knots.knots = &knot_vec[0];
if (dir == RT_NURB_SPLIT_ROW) {
new_knots.k_size = srf->order[0] * 2;
for (i = 0; i < srf->order[0]; i++) {
knot_vec[i] = param1;
knot_vec[i+srf->order[0]] = param2;
}
} else {
new_knots.k_size = srf->order[1] * 2;
for (i = 0; i < srf->order[1]; i++) {
knot_vec[i] = param1;
knot_vec[i+srf->order[1]] = param2;
}
}
region = rt_nurb_s_refine(srf, dir, &new_knots, res);
bu_free(knot_vec, "knot vector");
return region;
}
示例11: region_start
/**
* @brief This routine is called when a region is first encountered in the
* hierarchy when processing a tree
*
* @param tsp tree state (for parsing the tree)
* @param pathp A listing of all the nodes traversed to get to this node in the database
* @param combp the combination record for this region
*/
int
region_start(struct db_tree_state *tsp,
const struct db_full_path *pathp,
const struct rt_comb_internal *combp,
void *client_data)
{
char *name;
struct directory *dp;
struct bu_vls str = BU_VLS_INIT_ZERO;
struct user_data *your_stuff = (struct user_data *)client_data;
RT_CK_DBTS(tsp);
name = db_path_to_string(pathp);
bu_log("region_start %s\n", name);
bu_free(name, "reg_start name");
bu_log("data = %ld\n", your_stuff->data);
rt_pr_tol(&your_stuff->tol);
dp = DB_FULL_PATH_CUR_DIR(pathp);
/* here is where the conversion should be done */
if (combp->region_flag)
printf("Write this region (name=%s) as a part in your format:\n", dp->d_namep);
else
printf("Write this combination (name=%s) as an assembly in your format:\n", dp->d_namep);
describe_tree(combp->tree, &str);
printf("\t%s\n\n", bu_vls_addr(&str));
bu_vls_free(&str);
return 0;
}
示例12: RT_CK_FULL_PATH
/*
* Called from db_walk_tree().
*
* This routine must be prepared to run in parallel.
*/
union tree *do_region_end(struct db_tree_state *tsp, const struct db_full_path *pathp, union tree *curtree, void *UNUSED(client_data))
{
union tree *ret_tree;
struct bu_list vhead;
struct nmgregion *r;
RT_CK_FULL_PATH(pathp);
RT_CK_TREE(curtree);
RT_CK_TESS_TOL(tsp->ts_ttol);
BN_CK_TOL(tsp->ts_tol);
NMG_CK_MODEL(*tsp->ts_m);
BU_LIST_INIT(&vhead);
{
char *sofar = db_path_to_string(pathp);
bu_log("\ndo_region_end(%d %d%%) %s\n",
regions_tried,
regions_tried>0 ? (regions_converted * 100) / regions_tried : 0,
sofar);
bu_free(sofar, "path string");
}
if (curtree->tr_op == OP_NOP)
return curtree;
regions_tried++;
if (verbose)
bu_log("Attempting to process region %s\n", db_path_to_string(pathp));
ret_tree= process_boolean(curtree, tsp, pathp);
if (ret_tree)
r = ret_tree->tr_d.td_r;
else
{
if (verbose)
bu_log("\tNothing left of this region after Boolean evaluation\n");
regions_written++; /* don't count as a failure */
r = (struct nmgregion *)NULL;
}
regions_converted++;
if (r != (struct nmgregion *)NULL)
{
struct shell *s;
int empty_region=0;
int empty_model=0;
/* Kill cracks */
s = BU_LIST_FIRST(shell, &r->s_hd);
while (BU_LIST_NOT_HEAD(&s->l, &r->s_hd))
{
struct shell *next_s;
next_s = BU_LIST_PNEXT(shell, &s->l);
if (nmg_kill_cracks(s))
{
if (nmg_ks(s))
{
empty_region = 1;
break;
}
}
s = next_s;
}
/* kill zero length edgeuses */
if (!empty_region) {
empty_model = nmg_kill_zero_length_edgeuses(*tsp->ts_m);
}
if (!empty_region && !empty_model) {
process_triangulation(r, pathp, tsp);
regions_written++;
}
if (!empty_model)
nmg_kr(r);
}
/*
* Dispose of original tree, so that all associated dynamic
* memory is released now, not at the end of all regions.
* A return of TREE_NULL from this routine signals an error,
* and there is no point to adding _another_ message to our output,
* so we need to cons up an OP_NOP node to return.
*/
db_free_tree(curtree, &rt_uniresource); /* Does an nmg_kr() */
//.........这里部分代码省略.........
示例13: output_nmg
/* routine to output the faceted NMG representation of a BRL-CAD region */
static void
output_nmg(struct nmgregion *r, const struct db_full_path *pathp, int UNUSED(region_id), int UNUSED(material_id))
{
struct model *m;
struct shell *s;
struct vertex *v;
char *region_name;
NMG_CK_REGION(r);
RT_CK_FULL_PATH(pathp);
region_name = db_path_to_string(pathp);
m = r->m_p;
NMG_CK_MODEL(m);
/* triangulate model */
nmg_triangulate_model(m, &tol);
/* Output triangles */
if (verbose) {
printf("Convert these triangles to your format for region %s\n", region_name);
} else {
printf("Converted %s\n", region_name);
}
for (BU_LIST_FOR(s, shell, &r->s_hd))
{
struct faceuse *fu;
NMG_CK_SHELL(s);
for (BU_LIST_FOR(fu, faceuse, &s->fu_hd))
{
struct loopuse *lu;
/* vect_t facet_normal; */
NMG_CK_FACEUSE(fu);
if (fu->orientation != OT_SAME)
continue;
/* Grab the face normal if needed */
/* NMG_GET_FU_NORMAL(facet_normal, fu); */
for (BU_LIST_FOR(lu, loopuse, &fu->lu_hd))
{
struct edgeuse *eu;
NMG_CK_LOOPUSE(lu);
if (BU_LIST_FIRST_MAGIC(&lu->down_hd) != NMG_EDGEUSE_MAGIC)
continue;
/* loop through the edges in this loop (facet) */
if (verbose)
printf("\tfacet:\n");
for (BU_LIST_FOR(eu, edgeuse, &lu->down_hd))
{
NMG_CK_EDGEUSE(eu);
v = eu->vu_p->v_p;
NMG_CK_VERTEX(v);
if (verbose)
printf("\t\t(%g %g %g)\n", V3ARGS(v->vg_p->coord));
}
tot_polygons++;
}
}
}
bu_free(region_name, "region name");
}
示例14: fbm_free
/*
* F B M _ F R E E
*/
HIDDEN void
fbm_free(char *cp)
{
bu_free( cp, "fbm_specific" );
}
示例15: rt_vshootray
//.........这里部分代码省略.........
}
/*
* Ray has finally left known space.
*/
if (InitialPart.pt_forw == &InitialPart) {
if (ap->a_miss)
ret = ap->a_miss(ap);
else
ret = 0;
status = "MISSed all primitives";
goto freeup;
}
/*
* All intersections of the ray with the model have been computed.
* Evaluate the boolean trees over each partition.
*/
done = rt_boolfinal(&InitialPart, &FinalPart, BACKING_DIST, INFINITY, regionbits, ap, solidbits);
if (done > 0) goto hitit;
if (FinalPart.pt_forw == &FinalPart) {
if (ap->a_miss)
ret = ap->a_miss(ap);
else
ret = 0;
status = "MISS bool";
goto freeup;
}
/*
* Ray/model intersections exist. Pass the list to the user's
* a_hit() routine. Note that only the hit_dist elements of
* pt_inhit and pt_outhit have been computed yet. To compute both
* hit_point and hit_normal, use the
*
* RT_HIT_NORMAL(NULL, hitp, stp, rayp, 0);
*
* macro. To compute just hit_point, use
*
* VJOIN1(hitp->hit_point, rp->r_pt, hitp->hit_dist, rp->r_dir);
*/
hitit:
if (RT_G_DEBUG&DEBUG_SHOOT) rt_pr_partitions(rtip, &FinalPart, "a_hit()");
if (ap->a_hit)
ret = ap->a_hit(ap, &FinalPart, HeadSeg/* &finished_segs */);
else
ret = 0;
status = "HIT";
/*
* Processing of this ray is complete. Free dynamic resources.
*/
freeup:
{
register struct partition *pp;
/* Free up initial partition list */
for (pp = InitialPart.pt_forw; pp != &InitialPart;) {
register struct partition *newpp;
newpp = pp;
pp = pp->pt_forw;
FREE_PT(newpp, ap->a_resource);
}
/* Free up final partition list */
for (pp = FinalPart.pt_forw; pp != &FinalPart;) {
register struct partition *newpp;
newpp = pp;
pp = pp->pt_forw;
FREE_PT(newpp, ap->a_resource);
}
}
/* Segs can't be freed until after a_hit() has returned */
#if 0
/* FIXME: depends on commented out code above */
if (HeadSeg)
RT_FREE_SEG_LIST(HeadSeg, ap->a_resource);
#endif
out:
bu_free((char *)ary_stp, "*ary_stp[]");
bu_free((char *)ary_rp, "*ary_rp[]");
bu_free((char *)ary_seg, "ary_seg[]");
if (solidbits != NULL) {
bu_bitv_free(solidbits);
}
if (RT_G_DEBUG&(DEBUG_ALLRAYS|DEBUG_SHOOT|DEBUG_PARTITION)) {
bu_log("----------mshootray cpu=%d %d, %d lvl=%d (%s) %s ret=%d\n",
ap->a_resource->re_cpu,
ap->a_x, ap->a_y,
ap->a_level,
ap->a_purpose != (char *)0 ? ap->a_purpose : "?",
status, ret);
}
return ret;
}