6d5bd438f9b0e5760bc75135cbfd7f1f1339dc6b
[scilab.git] / scilab / modules / hdf5 / src / cpp / H5AttributesList.cpp
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 #include "H5AttributesList.hxx"
14 #include "H5Attribute.hxx"
15
16 namespace org_modules_hdf5
17 {
18
19 H5AttributesList::H5AttributesList(H5Object & _parent) : H5ListObject(_parent) { }
20
21 H5AttributesList::~H5AttributesList() { }
22
23 const unsigned int H5AttributesList::getSize() const
24 {
25     H5O_info_t info;
26     herr_t err = H5Oget_info(parent.getH5Id(), &info);
27
28     if (err < 0)
29     {
30         throw H5Exception(__LINE__, __FILE__, _("Cannot get the size of attribute list."));
31     }
32
33     return (unsigned int)info.num_attrs;
34 }
35
36 void H5AttributesList::setObject(const unsigned int pos, H5Attribute & attribute)
37 {
38
39 }
40
41 H5Attribute & H5AttributesList::getObject(const std::string & name)
42 {
43     return *new H5Attribute(parent, name);
44 }
45
46 H5Attribute & H5AttributesList::getObject(const int pos)
47 {
48     return getObject(pos, true);
49 }
50
51 H5Attribute & H5AttributesList::getObject(const int pos, const bool checkPos)
52 {
53     if (checkPos)
54     {
55         unsigned int size = getSize();
56         if (pos < 0 || pos >= size)
57         {
58             throw H5Exception(__LINE__, __FILE__, _("Invalid index %u: must be between 0 and %u."), pos, size);
59         }
60     }
61
62     return *new H5Attribute(parent, (const unsigned int)pos);
63 }
64
65 std::string H5AttributesList::dump(std::map<haddr_t, std::string> & alreadyVisited, const unsigned int indentLevel) const
66 {
67     std::ostringstream os;
68     unsigned int size = getSize();
69
70     for (unsigned int i = 0; i < size; i++)
71     {
72         const H5Attribute & attr = const_cast<H5AttributesList *>(this)->getObject(i, false);
73         os << attr.dump(alreadyVisited, indentLevel);
74
75         delete &attr;
76     }
77
78     return os.str();
79 }
80
81 std::string H5AttributesList::toString(const unsigned int indentLevel) const
82 {
83     std::ostringstream os;
84     std::string indentString = H5Object::getIndentString(indentLevel);
85
86     os << indentString << _("Filename") << ": " << getFile().getFileName() << std::endl
87        << indentString << _("Attributes") << ": [1 x " << getSize() << "]";
88
89     return os.str();
90 }
91 }