e9338b40145bf9f3a18a2fc06741200b9997a1fe
[scilab.git] / scilab / modules / hdf5 / src / cpp / H5CompoundData.hxx
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2012 - Scilab Enterprises - Calixte DENIZET
4  *
5  * Copyright (C) 2012 - 2016 - Scilab Enterprises
6  *
7  * This file is hereby licensed under the terms of the GNU GPL v2.0,
8  * pursuant to article 5.3.4 of the CeCILL v.2.1.
9  * This file was originally licensed under the terms of the CeCILL v2.1,
10  * and continues to be available under such terms.
11  * For more information, see the COPYING file which you should have received
12  * along with this program.
13  *
14  */
15
16 #ifndef __H5COMPOUNDDATA_HXX__
17 #define __H5COMPOUNDDATA_HXX__
18
19 #include "H5BasicData.hxx"
20
21 namespace org_modules_hdf5
22 {
23
24 class H5CompoundData : public H5BasicData<char>
25 {
26 public:
27
28     H5CompoundData(H5Object & _parent, const hsize_t _totalSize, const hsize_t _dataSize, const hsize_t _ndims, const hsize_t * _dims, char * _data, hid_t compoundType, const hsize_t stride, const size_t offset, const bool _dataOwner);
29
30     virtual ~H5CompoundData();
31
32     virtual void toScilab(void * pvApiCtx, const int lhsPosition, int * parentList = 0, const int listPosition = 0, const bool flip = true) const;
33
34     virtual void getAccessibleAttribute(const std::string & _name, const int pos, void * pvApiCtx) const;
35
36     virtual H5Data & getData(const std::string fieldname) const;
37
38     virtual H5Object & getData(const unsigned int size, const unsigned int * index) const;
39
40     virtual bool isCompound() const;
41
42     virtual std::string toString(const unsigned int indentLevel) const;
43
44     virtual std::string dump(std::map<haddr_t, std::string> & alreadyVisited, const unsigned int indentLevel) const;
45
46     virtual void printData(std::ostream & os, const unsigned int pos, const unsigned int indentLevel) const;
47
48     virtual void getFieldNames(const int position, void * pvApiCtx);
49
50     virtual bool mustDelete() const
51     {
52         return false;
53     }
54
55 protected:
56     class FieldInfo
57     {
58
59     public:
60
61         const hid_t type;
62         const hsize_t size;
63         const size_t offset;
64         const std::string name;
65
66         FieldInfo(const hid_t _type, const hsize_t _size, const size_t _offset, const std::string _name) : type(_type), size(_size), offset(_offset), name(_name) { }
67
68         ~FieldInfo()
69         {
70             if (type)
71             {
72                 H5Tclose(type);
73             }
74         }
75     };
76
77 private:
78
79     const hid_t type;
80     const hsize_t * cumprod;
81     unsigned int nfields;
82     std::map<std::string, FieldInfo *> * infos;
83     FieldInfo ** fieldinfos;
84 };
85 }
86
87 #endif // __H5COMPOUNDDATA_HXX__