Fix bugs with datatype representation
[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  * This file must be used under the terms of the CeCILL.
6  * This source file is licensed as described in the file COPYING, which
7  * you should have received as part of this distribution.  The terms
8  * are also available at
9  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10  *
11  */
12
13 #ifndef __H5COMPOUNDDATA_HXX__
14 #define __H5COMPOUNDDATA_HXX__
15
16 #include "H5BasicData.hxx"
17
18 namespace org_modules_hdf5
19 {
20
21 class H5CompoundData : public H5BasicData<char>
22 {
23 public:
24
25     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);
26
27     virtual ~H5CompoundData();
28
29     virtual void toScilab(void * pvApiCtx, const int lhsPosition, int * parentList = 0, const int listPosition = 0) const;
30
31     virtual void getAccessibleAttribute(const std::string & _name, const int pos, void * pvApiCtx) const;
32
33     virtual H5Data & getData(const std::string fieldname) const;
34
35     virtual H5Object & getData(const unsigned int size, const unsigned int * index) const;
36
37     virtual bool isCompound() const;
38
39     virtual std::string toString(const unsigned int indentLevel) const;
40
41     virtual std::string dump(std::map<haddr_t, std::string> & alreadyVisited, const unsigned int indentLevel) const;
42
43     virtual void printData(std::ostream & os, const unsigned int pos, const unsigned int indentLevel) const;
44
45     virtual void getFieldNames(const int position, void * pvApiCtx);
46
47     virtual bool mustDelete() const
48     {
49         return false;
50     }
51
52 protected:
53     class FieldInfo
54     {
55
56     public:
57
58         const hid_t type;
59         const hsize_t size;
60         const size_t offset;
61         const std::string name;
62
63         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) { }
64
65         ~FieldInfo()
66         {
67             if (type)
68             {
69                 H5Tclose(type);
70             }
71         }
72     };
73
74 private:
75
76     const hsize_t * cumprod;
77     unsigned int nfields;
78     std::map<std::string, FieldInfo *> * infos;
79     FieldInfo ** fieldinfos;
80     const hid_t type;
81 };
82 }
83
84 #endif // __H5COMPOUNDDATA_HXX__