summaryrefslogtreecommitdiffstats
path: root/c++/src/H5CompType.h
blob: b528aa48006d38e194dfc0b527b05c20e7316048 (plain)
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
// C++ informative line for the emacs editor: -*- C++ -*-
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * Copyright by The HDF Group.                                               *
 * Copyright by the Board of Trustees of the University of Illinois.         *
 * All rights reserved.                                                      *
 *                                                                           *
 * This file is part of HDF5.  The full HDF5 copyright notice, including     *
 * terms governing use, modification, and redistribution, is contained in    *
 * the COPYING file, which can be found at the root of the source code       *
 * distribution tree, or in https://www.hdfgroup.org/licenses.               *
 * If you do not have access to either file, you may request a copy from     *
 * help@hdfgroup.org.                                                        *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

#ifndef __H5CompType_H
#define __H5CompType_H

namespace H5 {

/*! \class CompType
    \brief CompType is a derivative of a DataType and operates on HDF5
    compound datatypes.
*/
//  Inheritance: DataType -> H5Object -> H5Location -> IdComponent

class ArrayType;
class VarLenType;

class H5_DLLCPP CompType : public DataType {
  public:
    // Default constructor
    CompType();

    // Creates a compound datatype using an existing id
    CompType(const hid_t existing_id);

    // Creates a new compound datatype, given the type's size
    CompType(size_t size); // H5Tcreate

    // Gets the compound datatype of the specified dataset
    CompType(const DataSet &dataset); // H5Dget_type

    // Copy constructor - makes a copy of original object
    CompType(const CompType &original);

    // Constructors that open a compound datatype, given a location.
    CompType(const H5Location &loc, const char *name);
    CompType(const H5Location &loc, const H5std_string &name);

    // Returns a CompType object via DataType* by decoding the binary
    // object description of this type.
    virtual DataType *decode() const;

    // Returns the type class of the specified member of this compound
    // datatype.  It provides to the user a way of knowing what type
    // to create another datatype of the same class
    H5T_class_t getMemberClass(unsigned member_num) const;

    // Returns the index of a member in this compound data type.
    int getMemberIndex(const char *name) const;
    int getMemberIndex(const H5std_string &name) const;

    // Returns the offset of a member of this compound datatype.
    size_t getMemberOffset(unsigned memb_no) const;

    // Returns the name of a member of this compound datatype.
    H5std_string getMemberName(unsigned member_num) const;

    // Returns the generic datatype of the specified member in
    // this compound datatype.
    DataType getMemberDataType(unsigned member_num) const;

    // Returns the array datatype of the specified member in
    // this compound datatype.
    ArrayType getMemberArrayType(unsigned member_num) const;

    // Returns the compound datatype of the specified member in
    // this compound datatype.
    CompType getMemberCompType(unsigned member_num) const;

    // Returns the enumeration datatype of the specified member in
    // this compound datatype.
    EnumType getMemberEnumType(unsigned member_num) const;

    // Returns the integer datatype of the specified member in
    // this compound datatype.
    IntType getMemberIntType(unsigned member_num) const;

    // Returns the floating-point datatype of the specified member in
    // this compound datatype.
    FloatType getMemberFloatType(unsigned member_num) const;

    // Returns the string datatype of the specified member in
    // this compound datatype.
    StrType getMemberStrType(unsigned member_num) const;

    // Returns the variable length datatype of the specified member in
    // this compound datatype.
    VarLenType getMemberVarLenType(unsigned member_num) const;

    // Returns the number of members in this compound datatype.
    int getNmembers() const;

    // Adds a new member to this compound datatype.
    void insertMember(const H5std_string &name, size_t offset, const DataType &new_member) const;

    // Recursively removes padding from within this compound datatype.
    void pack() const;

    // Sets the total size for this compound datatype.
    void setSize(size_t size) const;

    ///\brief Returns this class name.
    virtual H5std_string
    fromClass() const
    {
        return ("CompType");
    }

    // Noop destructor.
    virtual ~CompType();

  private:
    // Contains common code that is used by the member functions
    // getMemberXxxType
    hid_t p_get_member_type(unsigned member_num) const;

}; // end of CompType
} // namespace H5

#endif // __H5CompType_H