/* Is node a top-level sequence node? */ BOOL daptopseq(CDFnode* seq) { if(seq == NULL || seq->nctype != NC_Sequence) return FALSE; return daptoplevel(seq); }
NCerror computevarnodes(NCDAPCOMMON* nccomm, NClist* allnodes, NClist* varnodes) { unsigned int i,len; NClist* allvarnodes = nclistnew(); for(i=0; i<nclistlength(allnodes); i++) { CDFnode* node = (CDFnode*)nclistget(allnodes,i); #if 0 /* If this node has a bad name, repair it */ if(dap_badname(node->ocname)) { char* newname = dap_repairname(node->ocname); nullfree(node->ocname); node->ocname = newname; } #endif if(node->nctype == NC_Atomic) nclistpush(allvarnodes,(void*)node); } /* Further process the variable nodes to get the final set */ /* Use toplevel vars first */ len = nclistlength(allvarnodes); for(i=0; i<len; i++) { CDFnode* node = (CDFnode*)nclistget(allvarnodes,i); if(node == NULL) continue; if(daptoplevel(node)) { nclistpush(varnodes,(void*)node); nclistset(allvarnodes,i,(void*)NULL); } } /*... then grid arrays and maps. but exclude the coordinate variables if we are trying to exactly mimic nc-dap */ for(i=0; i<len; i++) { CDFnode* node = (CDFnode*)nclistget(allvarnodes,i); if(node == NULL) continue; if(dapgridarray(node)) { nclistpush(varnodes,(void*)node); nclistset(allvarnodes,i,(void*)NULL); } else if(dapgridmap(node)) { if(!FLAGSET(nccomm->controls,NCF_NCDAP)) nclistpush(varnodes,(void*)node); nclistset(allvarnodes,i,(void*)NULL); } } /*... then all others */ for(i=0; i<len; i++) { CDFnode* node = (CDFnode*)nclistget(allvarnodes,i); if(node == NULL) continue; nclistpush(varnodes,(void*)node); } nclistfree(allvarnodes); #ifdef DEBUG2 for(i=0; i<nclistlength(varnodes); i++) { CDFnode* node = (CDFnode*)nclistget(varnodes,i); if(node == NULL) continue; fprintf(stderr,"computevarnodes: var: %s\n",makecdfpathstring(node,".")); } #endif return NC_NOERR; }
/* Is node a top-level grid node? */ BOOL daptopgrid(CDFnode* grid) { if(grid == NULL || grid->nctype != NC_Grid) return FALSE; return daptoplevel(grid); }