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
|
#ifndef HDF_REF_GROUP_H_
#define HDF_REF_GROUP_H_
#include <hdf/HDFArray.hpp>
#include <hdf/HDFAtom.hpp>
#include <hdf/HDFGroup.hpp>
#include <pbdata/saf/RefGroup.hpp>
class HDFRefGroupGroup
{
public:
HDFGroup refGroup;
HDFArray<uint32_t> idArray;
HDFStringArray pathArray;
HDFArray<uint32_t> refInfoIdArray;
~HDFRefGroupGroup() { refGroup.Close(); }
bool Create(HDFGroup &parent)
{
parent.AddGroup("RefGroup");
if (refGroup.Initialize(parent.group, "RefGroup") == 0) {
return 0;
}
idArray.Create(refGroup, "ID");
pathArray.Create(refGroup, "Path");
refInfoIdArray.Create(refGroup, "RefInfoID");
return true;
}
int AddPath(std::string path, unsigned int refInfoId)
{
pathArray.Write(&path, 1);
unsigned int numPath = pathArray.size();
idArray.Write(&numPath, 1);
refInfoIdArray.Write(&refInfoId, 1);
return numPath;
}
int Initialize(HDFGroup &rootGroup)
{
refGroup.Initialize(rootGroup.group, "RefGroup");
if (idArray.Initialize(refGroup, "ID") == 0) {
return 0;
}
if (pathArray.Initialize(refGroup, "Path") == 0) {
return 0;
}
if (refInfoIdArray.Initialize(refGroup, "RefInfoID") == 0) {
return 0;
}
return 1;
}
void Read(RefGroup &refGroup)
{
int pathArrayNElem = pathArray.arrayLength;
refGroup.path.resize(pathArrayNElem);
pathArray.Read(0, pathArrayNElem, &refGroup.path[0]);
int idArrayNElem = idArray.arrayLength;
refGroup.id.resize(idArrayNElem);
idArray.Read(0, idArrayNElem, &refGroup.id[0]);
int refIDNElem = refInfoIdArray.arrayLength;
refGroup.refInfoId.resize(refIDNElem);
refInfoIdArray.Read(0, refIDNElem, &refGroup.refInfoId[0]);
}
};
#endif
|