PUBLIC void vrna_sc_remove(vrna_fold_compound_t *vc){ int s; if(vc){ switch(vc->type){ case VRNA_FC_TYPE_SINGLE: vrna_sc_free(vc->sc); vc->sc = NULL; break; case VRNA_FC_TYPE_COMPARATIVE: if(vc->scs){ for(s = 0; s < vc->n_seq; s++) vrna_sc_free(vc->scs[s]); free(vc->scs); } vc->scs = NULL; break; default: /* do nothing */ break; } } }
PUBLIC void vrna_fold_compound_free(vrna_fold_compound_t *vc){ int s; if(vc){ /* first destroy common attributes */ vrna_mx_mfe_free(vc); vrna_mx_pf_free(vc); free(vc->iindx); free(vc->jindx); free(vc->params); free(vc->exp_params); vrna_hc_free(vc->hc); /* now distinguish the vc type */ switch(vc->type){ case VRNA_VC_TYPE_SINGLE: free(vc->sequence); free(vc->sequence_encoding); free(vc->sequence_encoding2); free(vc->ptype); free(vc->ptype_pf_compat); vrna_sc_free(vc->sc); break; case VRNA_VC_TYPE_ALIGNMENT: for(s=0;s<vc->n_seq;s++){ free(vc->sequences[s]); free(vc->S[s]); free(vc->S5[s]); free(vc->S3[s]); free(vc->Ss[s]); free(vc->a2s[s]); } free(vc->sequences); free(vc->cons_seq); free(vc->S_cons); free(vc->S); free(vc->S5); free(vc->S3); free(vc->Ss); free(vc->a2s); free(vc->pscore); free(vc->pscore_pf_compat); if(vc->scs){ for(s=0;s<vc->n_seq;s++) vrna_sc_free(vc->scs[s]); free(vc->scs); } break; default: /* do nothing */ break; } /* free Distance Class Partitioning stuff (should be NULL if not used) */ free(vc->reference_pt1); free(vc->reference_pt2); free(vc->referenceBPs1); free(vc->referenceBPs2); free(vc->bpdist); free(vc->mm1); free(vc->mm2); /* free local folding related stuff (should be NULL if not used) */ if(vc->ptype_local){ for (s=0; (s < vc->window_size + 5) && (s <= vc->length); s++){ free(vc->ptype_local[s]); } free(vc->ptype_local); } if(vc->free_auxdata) vc->free_auxdata(vc->auxdata); free(vc); } }