From 766185c54b16930b3feb18a00690490d6607979e Mon Sep 17 00:00:00 2001 From: Uwe Schulzweida <uwe.schulzweida@mpimet.mpg.de> Date: Thu, 10 Nov 2022 13:48:51 +0100 Subject: [PATCH] Added initial version of cdi_query.c. --- app/cdi.c | 66 ------------------------------------------------- src/Makefile.am | 1 + src/cdi.h | 16 ++++++++++++ src/cdi_query.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++ src/make_cdilib | 1 + 5 files changed, 81 insertions(+), 66 deletions(-) create mode 100644 src/cdi_query.c diff --git a/app/cdi.c b/app/cdi.c index cb1a95417..e79a88937 100644 --- a/app/cdi.c +++ b/app/cdi.c @@ -729,72 +729,6 @@ defineCompress(const char *arg) fprintf(stderr, "%s compression unsupported!\n", arg); } -typedef struct CdiQuery -{ - int numNames; - char **names; -} CdiQuery; - -void -cdiQueryInit(CdiQuery *query) -{ - query->numNames = 0; - query->names = NULL; -} - -CdiQuery * -cdiQueryCreate() -{ - CdiQuery *query = (CdiQuery*) malloc(sizeof(CdiQuery)); - cdiQueryInit(query); - return query; -} - -void -cdiQueryDelete(CdiQuery *query) -{ - if (query->numNames && query) - { - for (int i = 0; i < query->numNames; ++i) free(query->names[i]); - free(query); - } -} - -void -cdiQuerySetNames(CdiQuery *query, int numNames, char **names) -{ - if (numNames) - { - query->numNames = numNames; - query->names = (char**)malloc(numNames * sizeof(char*)); - for (int i = 0; i < numNames; ++i) query->names[i] = strdup(names[i]); - } -} - -CdiQuery * -cdiQueryClone(CdiQuery *query) -{ - CdiQuery *queryOut = cdiQueryCreate(); - - if (query) - { - cdiQuerySetNames(queryOut, query->numNames, query->names); - } - - return queryOut; -} - -void -cdiQueryPrint(CdiQuery *query) -{ - if (query->numNames) - { - printf("Names:"); - for (int i = 0; i < query->numNames; ++i) printf(" %s", query->names[i]); - printf("\n"); - } -} - int main(int argc, char *argv[]) { diff --git a/src/Makefile.am b/src/Makefile.am index 77e1c06cb..eca0bb02a 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -47,6 +47,7 @@ libcdi_la_SOURCES = \ cdi_datetime.h \ cdi_error.c \ cdi_limits.h \ + cdi_query.c \ cdi_util.c \ cgribex.h \ cgribexlib.c \ diff --git a/src/cdi.h b/src/cdi.h index 7fffa8c24..44f1b97ae 100644 --- a/src/cdi.h +++ b/src/cdi.h @@ -1315,6 +1315,21 @@ void vlistDefVarProductDefinitionTemplate(int vlistID, int varID, int productDef extern "C" { #endif +// CDI query interface + +typedef struct CdiQuery +{ + int numNames; + char **names; +} CdiQuery; + +CdiQuery *cdiQueryCreate(); +void cdiQueryDelete(CdiQuery *query); +void cdiQuerySetNames(CdiQuery *query, int numNames, char **names); +void cdiQueryPrint(CdiQuery *query); + +// CDI interface for paraview vtkCDIReader.cxx + #include "cdi_datetime.h" void taxisDefRdatetime(int taxisID, CdiDateTime rdatetime); @@ -1333,6 +1348,7 @@ int64_t julday_to_date(int calendar, int64_t julday); int time_to_sec(int time); // Used in paraview vtkCDIReader.cxx int sec_to_time(int secofday); +// CDI projection parameter interface struct CDI_GridProjParams { diff --git a/src/cdi_query.c b/src/cdi_query.c new file mode 100644 index 000000000..b97724e49 --- /dev/null +++ b/src/cdi_query.c @@ -0,0 +1,63 @@ +#include <string.h> +#include <stdlib.h> +#include "cdi.h" + +void +cdiQueryInit(CdiQuery *query) +{ + query->numNames = 0; + query->names = NULL; +} + +CdiQuery * +cdiQueryCreate() +{ + CdiQuery *query = (CdiQuery*) malloc(sizeof(CdiQuery)); + cdiQueryInit(query); + return query; +} + +void +cdiQueryDelete(CdiQuery *query) +{ + if (query->numNames && query) + { + for (int i = 0; i < query->numNames; ++i) free(query->names[i]); + free(query); + } +} + +void +cdiQuerySetNames(CdiQuery *query, int numNames, char **names) +{ + if (numNames) + { + query->numNames = numNames; + query->names = (char**)malloc(numNames * sizeof(char*)); + for (int i = 0; i < numNames; ++i) query->names[i] = strdup(names[i]); + } +} + +CdiQuery * +cdiQueryClone(CdiQuery *query) +{ + CdiQuery *queryOut = cdiQueryCreate(); + + if (query) + { + cdiQuerySetNames(queryOut, query->numNames, query->names); + } + + return queryOut; +} + +void +cdiQueryPrint(CdiQuery *query) +{ + if (query->numNames) + { + printf("Names:"); + for (int i = 0; i < query->numNames; ++i) printf(" %s", query->names[i]); + printf("\n"); + } +} diff --git a/src/make_cdilib b/src/make_cdilib index d39c11ebf..6e2920177 100755 --- a/src/make_cdilib +++ b/src/make_cdilib @@ -109,6 +109,7 @@ files="async_worker.c \ cdi_error.c \ cdi_datetime.c \ cdi_int.c \ + cdi_query.c \ cdi_util.c \ cgribexlib.c \ cksum.c \ -- GitLab