Ejemplo n.º 1
0
Archivo: cdf.c Proyecto: qingu/netcdf-c
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;
}
Ejemplo n.º 2
0
BOOL
dapgridelement(CDFnode* node)
{
    return dapgridarray(node)
           || dapgridmap(node);
}