File: H5Vol_group.c

package info (click to toggle)
adios2 2.10.2%2Bdfsg1-2
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 33,764 kB
  • sloc: cpp: 175,964; ansic: 160,510; f90: 14,630; yacc: 12,668; python: 7,275; perl: 7,126; sh: 2,825; lisp: 1,106; xml: 1,049; makefile: 579; lex: 557
file content (84 lines) | stat: -rw-r--r-- 2,453 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#ifndef __H5VOL_GROUP_FUNC
#define __H5VOL_GROUP_FUNC

#include "H5Vol_def.h"

void *H5VL_adios2_group_create(void *obj, const H5VL_loc_params_t *loc_params, const char *name,
                               hid_t lcpl_id, hid_t gcpl_id, hid_t gapl_id, hid_t dxpl_id,
                               void **req)
{
    REQUIRE_NOT_NULL_ERR(obj, NULL);
    H5VL_ObjDef_t *vol = (H5VL_ObjDef_t *)obj;

    // NOTE: flaky here as I do not check whether this group was create before.
    //       good faith on users
    if ((H5I_GROUP == loc_params->obj_type) || (H5I_FILE == loc_params->obj_type))
    {
        H5VL_GroupDef_t *grp = gCreateGroupDef(name);
        return gGroupToVolObj(grp, vol);
    }
    return NULL;
}

herr_t H5VL_adios2_group_close(void *obj, hid_t dxpl_id, void **req)
{
    if (NULL == obj)
        return 0;

    H5VL_ObjDef_t *vol = (H5VL_ObjDef_t *)obj;
    H5VL_GroupDef_t *grp = (H5VL_GroupDef_t *)(vol->m_ObjPtr);
    SAFE_FREE(grp->m_Name);

    SAFE_FREE(grp);

    gFreeVol(vol);
    return 0;
}

void *H5VL_adios2_group_open(void *obj, const H5VL_loc_params_t *loc_params, const char *name,
                             hid_t gapl_id, hid_t dxpl_id, void **req)
{
    REQUIRE_NOT_NULL_ERR(obj, NULL);
    REQUIRE_NOT_NULL_ERR(loc_params, NULL);

    H5VL_ObjDef_t *vol = (H5VL_ObjDef_t *)obj;

    if ((H5I_GROUP == loc_params->obj_type) | (H5I_FILE == loc_params->obj_type))
    {
        H5VL_GroupDef_t *grp = gCreateGroupDef(name);
        return gGroupToVolObj(grp, vol);
    }

    return NULL;
}

herr_t H5VL_adios2_group_get(void *obj, H5VL_group_get_args_t *args, hid_t H5_ATTR_UNUSED dxpl_id,
                             void H5_ATTR_UNUSED **req)
{
    REQUIRE_NOT_NULL_ERR(obj, -1);
    H5VL_ObjDef_t *vol = (H5VL_ObjDef_t *)obj;

    switch (args->op_type)
    {
    case H5VL_GROUP_GET_INFO: {
        const H5VL_loc_params_t *loc_params = &args->args.get_info.loc_params;
        H5G_info_t *group_info = args->args.get_info.ginfo;

        if (loc_params->type == H5VL_OBJECT_BY_SELF)
        {
            gLoadContent(vol);
            gLoadSubGroups(vol);
            group_info->storage_type = H5G_STORAGE_TYPE_COMPACT;
            // group_info->nlinks       = vol->m_NumAttrs + vol->m_NumVars +
            // vol->m_NumSubGroups;
            group_info->nlinks = vol->m_NumVars + vol->m_NumSubGroups;
            return 0;
        }
    }
    default:
        break;
    }
    return -1;
}

#endif