/****************************************************************************\ * delete a structured list of derivative images, created by * * create_work_arrays. * \****************************************************************************/ #include #include "structs.h" #include "nrutil.h" void delete_work_arrays (struct fitpars *fpar, struct derivs *df) { void delete_derivs (struct fitpars *fpar, struct derivs *); if (fpar->next != NULL) delete_work_arrays (fpar->next, df->next); delete_derivs (fpar, df); } /*****************************************************************************/ void delete_derivs (struct fitpars *fpar, struct derivs *df) { int i; static int high = 0; for (i=0; i <= fpar->npars; ++i) { if (df->naxes[1] > 0 && df->naxes[2] > 0) if ((i > 0 && fpar->ia[i] > 0) || i==0) free_matrix (df->dpm[i], 1, df->naxes[2], 1, df->naxes[1]); }; free ((float ***) df->dpm); /*-----------------------------------------------------------------\ | Recursively go down the higher order linked list till the end. | \-----------------------------------------------------------------*/ if (fpar->next != NULL && high >= 1) { delete_derivs (fpar->next, df->next); df->next = NULL; } /*--------------------------------------------------------------------\ | If there are higher order terms, enter that list. But if already | | in high order structure, then don't go any higher. | \--------------------------------------------------------------------*/ if (fpar->high != NULL) { high += 1; delete_derivs (fpar->high, df->high); df->high = NULL; high -= 1; }; free ((struct derivs *) df); }