/* ******** nrrdEmpty() ** ** frees data inside nrrd AND resets all its state, so its the ** same as what comes from nrrdNew(). This includes free()ing ** any comments. */ Nrrd * nrrdEmpty(Nrrd *nrrd) { if (nrrd) { nrrd->data = airFree(nrrd->data); nrrdInit(nrrd); } return nrrd; }
/* ******** nrrdNew() ** ** creates and initializes a Nrrd ** ** this does NOT use biff */ Nrrd * nrrdNew(void) { int ii; Nrrd *nrrd; nrrd = (Nrrd*)(calloc(1, sizeof(Nrrd))); if (!nrrd) { return NULL; } /* explicitly set pointers to NULL, since calloc isn't officially guaranteed to do that. */ nrrd->data = NULL; for (ii=0; ii<NRRD_DIM_MAX; ii++) { _nrrdAxisInfoNewInit(nrrd->axis + ii); } for (ii=0; ii<NRRD_SPACE_DIM_MAX; ii++) { nrrd->spaceUnits[ii] = NULL; } nrrd->content = NULL; nrrd->sampleUnits = NULL; /* create comment airArray (even though it starts empty) */ nrrd->cmt = NULL; void *pvoid = (void*)&(nrrd->cmt); nrrd->cmtArr = airArrayNew((void**)pvoid, NULL, sizeof(char *), NRRD_COMMENT_INCR); if (!nrrd->cmtArr) { return NULL; } airArrayPointerCB(nrrd->cmtArr, airNull, airFree); /* create key/value airArray (even thought it starts empty) */ nrrd->kvp = NULL; pvoid = &(nrrd->kvp); nrrd->kvpArr = airArrayNew((void**)pvoid, NULL, 2*sizeof(char *), NRRD_KEYVALUE_INCR); if (!nrrd->kvpArr) { return NULL; } /* key/value airArray uses no callbacks for now */ /* finish initializations */ nrrdInit(nrrd); return nrrd; }