15 #include "nc4internal.h"
16 #include "nc4dispatch.h"
32 NC4_inq_ncid(
int ncid,
const char *name,
int *grp_ncid)
34 NC_GRP_INFO_T *grp, *g;
39 LOG((2,
"nc_inq_ncid: ncid 0x%x name %s", ncid, name));
42 if ((retval = nc4_find_grp_h5(ncid, &grp, &h5)))
49 NC_FILE_INFO_T* file = grp->nc4_info;
50 *grp_ncid = file->controller->ext_ncid | file->root_grp->hdr.id;
56 if ((retval = nc4_check_name(name, norm_name)))
59 g = (NC_GRP_INFO_T*)ncindexlookup(grp->children,norm_name);
63 *grp_ncid = grp->nc4_info->controller->ext_ncid | g->hdr.id;
84 NC4_inq_grps(
int ncid,
int *numgrps,
int *ncids)
86 NC_GRP_INFO_T *grp, *g;
92 LOG((2,
"nc_inq_grps: ncid 0x%x", ncid));
95 if ((retval = nc4_find_grp_h5(ncid, &grp, &h5)))
100 for(i=0;i<ncindexsize(grp->children);i++)
102 g = (NC_GRP_INFO_T*)ncindexith(grp->children,i);
103 if(g == NULL)
continue;
109 *ncids = g->hdr.id | g->nc4_info->controller->ext_ncid;
133 NC4_inq_grpname(
int ncid,
char *name)
139 LOG((2,
"nc_inq_grpname: ncid 0x%x", ncid));
142 if ((retval = nc4_find_grp_h5(ncid, &grp, &h5)))
148 strcpy(name, grp->hdr.name);
169 NC4_inq_grpname_full(
int ncid,
size_t *lenp,
char *full_name)
172 int g,
id = ncid, parent_id, *gid;
176 for (g = 0; !NC4_inq_grp_parent(
id, &parent_id); g++,
id = parent_id)
180 if (!(name = malloc((g + 1) * (
NC_MAX_NAME + 1) + 1)))
182 if (!(gid = malloc((g + 1) *
sizeof(
int))))
190 strcpy(name, NC_GROUP_NAME);
194 for (i = 1; i < g && !ret; i++)
195 ret = NC4_inq_grp_parent(gid[i - 1], &gid[i]);
198 for (i = g - 1; !ret && i >= 0 && !ret; i--)
200 if ((ret = NC4_inq_grpname(gid[i], grp_name)))
202 strcat(name, grp_name);
209 *lenp = strlen(name);
212 if (!ret && full_name)
213 strcpy(full_name, name);
236 NC4_inq_grp_parent(
int ncid,
int *parent_ncid)
242 LOG((2,
"nc_inq_grp_parent: ncid 0x%x", ncid));
245 if ((retval = nc4_find_grp_h5(ncid, &grp, &h5)))
253 *parent_ncid = grp->nc4_info->controller->ext_ncid | grp->parent->hdr.id;
276 NC4_inq_grp_full_ncid(
int ncid,
const char *full_name,
int *grp_ncid)
281 char *cp, *full_name_cpy;
288 if ((ret = nc4_find_grp_h5(ncid, &grp, &h5)))
294 if (!(full_name_cpy = strdup(full_name)))
298 if (!(cp = strtok(full_name_cpy,
"/")))
313 for (; cp; id1 = id2)
315 if ((ret = NC4_inq_ncid(id1, cp, &id2)))
320 cp = strtok(NULL,
"/");
345 NC4_inq_varids(
int ncid,
int *nvars,
int *varids)
354 LOG((2,
"nc_inq_varids: ncid 0x%x", ncid));
357 if ((retval = nc4_find_grp_h5(ncid, &grp, &h5)))
363 for (i=0; i < ncindexsize(grp->vars); i++)
365 var = (NC_VAR_INFO_T*)ncindexith(grp->vars,i);
368 varids[num_vars] = var->hdr.id;
391 int int_cmp(
const void *a,
const void *b)
393 const int *ia = (
const int *)a;
394 const int *ib = (
const int *)b;
414 NC4_inq_dimids(
int ncid,
int *ndims,
int *dimids,
int include_parents)
416 NC_GRP_INFO_T *grp, *g;
422 LOG((2,
"nc_inq_dimids: ncid 0x%x include_parents: %d", ncid,
426 if ((retval = nc4_find_grp_h5(ncid, &grp, &h5)))
431 num = ncindexcount(grp->dim);
432 if (include_parents) {
433 for (g = grp->parent; g; g = g->parent)
434 num += ncindexcount(g->dim);
444 for(i=0;i<ncindexsize(grp->dim);i++) {
445 dim = (NC_DIM_INFO_T*)ncindexith(grp->dim,i);
446 if(dim == NULL)
continue;
447 dimids[n++] = dim->hdr.id;
452 for (g = grp->parent; g; g = g->parent) {
453 for(i=0;i<ncindexsize(g->dim);i++) {
454 dim = (NC_DIM_INFO_T*)ncindexith(g->dim,i);
455 if(dim == NULL)
continue;
456 dimids[n++] = dim->hdr.id;
459 qsort(dimids, num,
sizeof(
int), int_cmp);