libinvdb/source/include/dbobjecttree.hh

68 lines
1.5 KiB
C++

#ifndef INVENTORY_OBJECT_TREE_HH_
#define INVENTORY_OBJECT_TREE_HH_
#include "dbobjectptr.hh"
#include "dbobjecttreeptr.hh"
#include "dbcontainer.hh"
#include "cxx-semantics.hh"
#include <vector>
#include <functional>
namespace inventory {
namespace db {
class DBSession;
}
namespace datamodel {
template <class Object>
class DBObjectTree : public DBObjectTreePtrBase<Object> {
public:
template <class T>
using SubtreeContainer = std::vector<DBObjectTreePtr<T>>;
typedef DBContainerPtr<Object, SubtreeContainer>
SubtreeContainerPtr;
class SubtreeVisitor :
public semantics::visitor<DBObjectPtr<Object>, int, int> {};
// visibility outside of DBObjectTree
typedef SubtreeVisitor Visitor;
DBObjectTree() {
m_object.reset(new Object);
m_object->id = (int)(Object::Id::ROOT);
}
DBObjectTree(DBObjectPtr<Object> obj)
: m_object(obj) {}
DBObjectTree(DBObjectPtr<Object> obj, DBObjectTreePtr<Object> suptree)
: m_object(obj), m_suptree(suptree) {}
DBObjectPtr<Object> object() {
return m_object;
}
SubtreeContainerPtr subtree() {
return m_subtree;
}
void fetch_object(db::DBSession &);
void fetch_subtree(db::DBSession &);
void recurse_subtrees(db::DBSession &session, Visitor &visitor,
int max_level = -1, int level = 0);
private:
DBObjectPtr<Object> m_object;
DBObjectTreePtr<Object> m_suptree;
SubtreeContainerPtr m_subtree;
};
}
}
#endif