Salome HOME
5dff5b35e63b3f5122cc523c3c6c887443ac5c4a
[modules/kernel.git] / src / HDFPersist / HDFattribute.cc
1 //  SALOME HDFPersist : implementation of HDF persitent ( save/ restore )
2 //
3 //  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 //  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
5 // 
6 //  This library is free software; you can redistribute it and/or 
7 //  modify it under the terms of the GNU Lesser General Public 
8 //  License as published by the Free Software Foundation; either 
9 //  version 2.1 of the License. 
10 // 
11 //  This library is distributed in the hope that it will be useful, 
12 //  but WITHOUT ANY WARRANTY; without even the implied warranty of 
13 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
14 //  Lesser General Public License for more details. 
15 // 
16 //  You should have received a copy of the GNU Lesser General Public 
17 //  License along with this library; if not, write to the Free Software 
18 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
19 // 
20 //  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
21 //
22 //
23 //
24 //  File   : HDFattribute.cc
25 //  Module : SALOME
26
27 extern "C"
28 {
29 #include "hdfi.h"
30 }
31 #include "HDFexception.hxx"
32 #include "HDFattribute.hxx"
33 #include "HDFinternalObject.hxx"
34 using namespace std;
35
36 HDFattribute::HDFattribute(char *name,HDFinternalObject *father,hdf_type type, size_t size)
37   : HDFobject(name)
38 {
39   _father = father;
40   _fid = _father->GetId();
41   _type = type;
42   _size = size;
43 }
44
45 HDFattribute::HDFattribute(char *name,HDFinternalObject *father)
46   : HDFobject(name)
47 {
48   _father = father;
49   _fid = _father->GetId();
50   _type = HDF_NONE;
51   _size = 0;
52 }
53
54 void HDFattribute::CreateOnDisk()
55 {
56   if ((_id = HDFattrCreate(_fid,_name, _type, _size)) < 0)
57     throw HDFexception("Can't create attribute");
58 }
59 void HDFattribute::OpenOnDisk()
60 {
61   if ((_id = HDFattrOpen(_fid,_name)) < 0)
62     throw HDFexception("Can't open attribute");
63 }
64 void HDFattribute::CloseOnDisk()
65 {
66   hdf_err ret;
67
68   if ((ret = HDFattrClose(_id)) < 0)
69       throw HDFexception("Can't close attribute");
70 }
71
72 void HDFattribute::WriteOnDisk(void *values)
73 {
74   hdf_err ret;
75
76   if ((ret = HDFattrWrite(_id,values)) < 0)
77     throw HDFexception("Can't write attribute");
78 }
79
80 void HDFattribute::ReadFromDisk(void *values)
81 {
82   hdf_err ret; 
83
84   if ((ret = HDFattrRead(_id,values)) < 0)
85     throw HDFexception("Can't read attribute");
86 }
87
88 HDFinternalObject * HDFattribute::GetFather()
89 {
90   return _father;
91 }
92
93 hdf_type HDFattribute::GetType()
94 {
95  if (_type == HDF_NONE)
96     if ((_type = HDFattrGetType(_id)) == HDF_NONE)
97       throw HDFexception("Can't determine the type of data in the attribute");
98
99   return _type;
100 }
101
102 size_t HDFattribute::GetSize()
103 {
104   if(_size == 0) {
105     if((_size = HDFattrGetSize(_id)) < 0)
106       throw HDFexception("Can't determine the size of data in the attribute");
107   }
108   return _size;
109 }