dev #2
5 changed files with 60 additions and 5 deletions
|
@ -39,6 +39,13 @@ namespace CNORXZ
|
||||||
hid_t id() const;
|
hid_t id() const;
|
||||||
inline bool isOpen() const { return mId != 0; }
|
inline bool isOpen() const { return mId != 0; }
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
ContentBase& addAttribute(const String& name, const T& value);
|
||||||
|
DType getAttribute(const String& name) const;
|
||||||
|
bool isAttribute(const String& name) const;
|
||||||
|
String getAttributesAsString() const;
|
||||||
|
String getRecursiveAttributesAsString() const; // + all parent's attributes
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
String mName;
|
String mName;
|
||||||
const ContentBase* mParent = nullptr;
|
const ContentBase* mParent = nullptr;
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
#define __cxz_h5_group_cc_h__
|
#define __cxz_h5_group_cc_h__
|
||||||
|
|
||||||
#include "h5_group.h"
|
#include "h5_group.h"
|
||||||
|
#include "xpr/for.h"
|
||||||
|
|
||||||
namespace CNORXZ
|
namespace CNORXZ
|
||||||
{
|
{
|
||||||
|
@ -54,6 +55,22 @@ namespace CNORXZ
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <class F>
|
||||||
|
decltype(auto) Group::iter(F&& f) const
|
||||||
|
{
|
||||||
|
RangePtr gr = *mCont.range()->sub().begin();
|
||||||
|
auto gi = std::make_shared<UIndex<String>>(gr);
|
||||||
|
return gi->ifor( operation(std::forward<F>(f), mCont(gi)), NoF{} );
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class F>
|
||||||
|
decltype(auto) Group::iterRecursive(F&& f) const
|
||||||
|
{
|
||||||
|
return iter( [&](const auto& c) {
|
||||||
|
f(c);
|
||||||
|
recursion(c, std::forward<F>(f));
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -42,7 +42,26 @@ namespace CNORXZ
|
||||||
Group& addTable(const String& name, const ArrayBase<Tuple<Ts...>>& data,
|
Group& addTable(const String& name, const ArrayBase<Tuple<Ts...>>& data,
|
||||||
const Vector<String>& fnames);
|
const Vector<String>& fnames);
|
||||||
|
|
||||||
|
template <class F>
|
||||||
|
decltype(auto) iter(F&& f) const;
|
||||||
|
|
||||||
|
template <class F>
|
||||||
|
decltype(auto) iterRecursive(F&& f) const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
|
template <typename C, class F>
|
||||||
|
static void recursion(const C& c, F&& f)
|
||||||
|
{
|
||||||
|
if(c->type() == ContentType::GROUP){
|
||||||
|
auto cx = std::dynamic_pointer_cast<Group>(c);
|
||||||
|
cx->open();
|
||||||
|
if(cx->get().range() != nullptr){
|
||||||
|
cx->iterRecursive(std::forward<F>(f))();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
MArray<ContentPtr> mCont;
|
MArray<ContentPtr> mCont;
|
||||||
|
|
||||||
void mkCont();
|
void mkCont();
|
||||||
|
|
|
@ -67,7 +67,8 @@ namespace CNORXZ
|
||||||
|
|
||||||
String File::path() const
|
String File::path() const
|
||||||
{
|
{
|
||||||
return String("/");
|
//return String("/");
|
||||||
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
String File::filename() const
|
String File::filename() const
|
||||||
|
|
|
@ -39,7 +39,7 @@ namespace
|
||||||
Group_Test()
|
Group_Test()
|
||||||
{
|
{
|
||||||
mFileName = testh5file;
|
mFileName = testh5file;
|
||||||
mGrps = { "gr1", "gr2" };
|
//mGrps = { "gr1", "gr2", "foo", "bar", "moregroups" };
|
||||||
mFs = {"field1","second","real"};
|
mFs = {"field1","second","real"};
|
||||||
Vector<Tuple<SizeT,Int,Double>> v
|
Vector<Tuple<SizeT,Int,Double>> v
|
||||||
( { {0, -6, 3.141},
|
( { {0, -6, 3.141},
|
||||||
|
@ -53,7 +53,7 @@ namespace
|
||||||
}
|
}
|
||||||
|
|
||||||
String mFileName;
|
String mFileName;
|
||||||
Vector<String> mGrps;
|
//Vector<String> mGrps;
|
||||||
|
|
||||||
Vector<String> mFs;
|
Vector<String> mFs;
|
||||||
MArray<Tuple<SizeT,Int,Double>> mTabA;
|
MArray<Tuple<SizeT,Int,Double>> mTabA;
|
||||||
|
@ -82,7 +82,15 @@ namespace
|
||||||
h5f.open();
|
h5f.open();
|
||||||
h5f.addGroup("gr1");
|
h5f.addGroup("gr1");
|
||||||
h5f.addGroup("gr2");
|
h5f.addGroup("gr2");
|
||||||
EXPECT_EQ(h5f.get().size(), 2u);
|
h5f.addGroup("foo");
|
||||||
|
h5f.addGroup("moregroups");
|
||||||
|
h5f.addGroup("bar");
|
||||||
|
h5f.getGroup("moregroups")->open().addGroup("evenmore");
|
||||||
|
h5f.getGroup("moregroups")->getGroup("evenmore")->open().addGroup("we");
|
||||||
|
h5f.getGroup("moregroups")->getGroup("evenmore")->addGroup("need");
|
||||||
|
h5f.getGroup("moregroups")->getGroup("evenmore")->addGroup("more");
|
||||||
|
h5f.getGroup("moregroups")->getGroup("evenmore")->addGroup("groups");
|
||||||
|
EXPECT_EQ(h5f.get().size(), 5u);
|
||||||
h5f.close();
|
h5f.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -100,14 +108,17 @@ namespace
|
||||||
File h5f(mFileName, true);
|
File h5f(mFileName, true);
|
||||||
h5f.open();
|
h5f.open();
|
||||||
EXPECT_TRUE(h5f.ro());
|
EXPECT_TRUE(h5f.ro());
|
||||||
EXPECT_EQ(h5f.get().size(), 2u);
|
EXPECT_EQ(h5f.get().size(), 5u);
|
||||||
|
|
||||||
EXPECT_THROW(h5f.getGroup("gr0"), std::runtime_error);
|
EXPECT_THROW(h5f.getGroup("gr0"), std::runtime_error);
|
||||||
auto gr1 = h5f.getGroup("gr1");
|
auto gr1 = h5f.getGroup("gr1");
|
||||||
gr1->open();
|
gr1->open();
|
||||||
auto tab = gr1->getTable("tab1");
|
auto tab = gr1->getTable("tab1");
|
||||||
|
VCHECK(tab->path());
|
||||||
EXPECT_EQ(tab->fields()->size(), 3u);
|
EXPECT_EQ(tab->fields()->size(), 3u);
|
||||||
EXPECT_EQ(tab->records()->size(), 5u);
|
EXPECT_EQ(tab->records()->size(), 5u);
|
||||||
|
h5f.iter( [](const auto& c) { VCHECK(c->path()); } )();
|
||||||
|
h5f.iterRecursive( [](const auto& c) { VCHECK(c->path()); } )();
|
||||||
h5f.close();
|
h5f.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue