void SelectionTreeElement::freeExpressionData() { if (type == SEL_EXPRESSION || type == SEL_MODIFIER) { _gmx_selelem_free_method(u.expr.method, u.expr.mdata); u.expr.mdata = NULL; u.expr.method = NULL; /* Free position data */ delete u.expr.pos; u.expr.pos = NULL; /* Free position calculation data */ if (u.expr.pc) { gmx_ana_poscalc_free(u.expr.pc); u.expr.pc = NULL; } } if (type == SEL_ARITHMETIC) { sfree(u.arith.opstr); u.arith.opstr = NULL; } if (type == SEL_SUBEXPR || type == SEL_ROOT || (type == SEL_CONST && v.type == GROUP_VALUE)) { gmx_ana_index_deinit(&u.cgrp); } if (type == SEL_GROUPREF) { sfree(u.gref.name); } }
/*! * \param data Data to free (should point to a \c t_methoddata_kweval). * * Frees the memory allocated for all the members of \c t_methoddata_kweval. */ static void free_data_kweval(void *data) { t_methoddata_kweval *d = (t_methoddata_kweval *)data; _gmx_selelem_free_method(d->kwmethod, d->kwmdata); }
/*! * \param[in] sel Selection to free. */ void _gmx_selelem_free_exprdata(t_selelem *sel) { if (sel->type == SEL_EXPRESSION || sel->type == SEL_MODIFIER) { _gmx_selelem_free_method(sel->u.expr.method, sel->u.expr.mdata); sel->u.expr.mdata = NULL; sel->u.expr.method = NULL; /* Free position data */ if (sel->u.expr.pos) { gmx_ana_pos_free(sel->u.expr.pos); sel->u.expr.pos = NULL; } /* Free position calculation data */ if (sel->u.expr.pc) { gmx_ana_poscalc_free(sel->u.expr.pc); sel->u.expr.pc = NULL; } } if (sel->type == SEL_ARITHMETIC) { sfree(sel->u.arith.opstr); sel->u.arith.opstr = NULL; } if (sel->type == SEL_SUBEXPR || sel->type == SEL_ROOT || (sel->type == SEL_CONST && sel->v.type == GROUP_VALUE)) { gmx_ana_index_deinit(&sel->u.cgrp); } if (sel->type == SEL_GROUPREF) { sfree(sel->u.gref.name); } }