#include #include "nrutil.h" #include "structs.h" void free_fitvecs (float **drd, struct fitpars **tilt, struct fitpars *b, float **bdrd, struct fitpars *f, float **fdrd, float **dIedfp, struct fitpars *r, float **rdrd, float **dIedrp, int normtype, struct trunc_links *trlink, struct trunc_val *trval) { void free_trunclink (struct trunc_links *trlink, int *layer); void free_truncval (struct trunc_val *trval, int *layer); int layer; if (*drd != NULL) { free_vector (*drd, 1, NPARS); drd = NULL; }; if (*tilt != NULL) { free ((float *)(*tilt)->a); free ((int *)(*tilt)->ia); free ((struct fitpars *)*tilt); tilt = NULL; }; if (b != NULL) { free_vector (*bdrd, 1, b->npars); b = NULL; }; if (f != NULL) { free_vector (*fdrd, 1, f->npars); if (dIedfp != NULL) free_vector (*dIedfp, 1, f->npars); f = NULL; }; if (r != NULL) { free_vector (*rdrd, 1, r->npars); if (dIedrp != NULL) free_vector (*dIedrp, 1, r->npars); r = NULL; }; if (trlink->objtype != NULL) { layer = 1; free_truncval (trval, &layer); }; if (trlink->objtype != NULL) { layer = 1; free_trunclink (trlink, &layer); }; } void free_trunclink (struct trunc_links *trlink, int *layer) { while (trlink->next != NULL) { (*layer)++; free_trunclink (trlink->next, layer); free (trlink->next); trlink->next = NULL; }; if (trlink->drd != NULL) free_vector (trlink->drd, 1, NPARS); if (trlink->f != NULL) free_vector (trlink->fdrd, 1, trlink->f->npars); if (trlink->b != NULL) free_vector (trlink->bdrd, 1, trlink->b->npars); trlink->drdc = 0.; }; void free_truncval (struct trunc_val *trval, int *layer) { while (trval->next != NULL) { (*layer)++; free_truncval (trval->next, layer); free (trval->next); trval->next = NULL; }; };