#ifndef INVENTORY_OBJECT_TREE_IMPL_HH_ #define INVENTORY_OBJECT_TREE_IMPL_HH_ #include "dbobjecttree.hh" #include "dbobject.hh" #include "dbsession.hh" #include "dbcontainer.hh" #include "dbcontainerptr.hh" #include namespace inventory { namespace datamodel { template void DBObjectTree::fetch_object(db::DBSession &session) { m_object->refresh(session); } template void DBObjectTree::fetch_subtree(db::DBSession &session) { if (!m_object) fetch_object(session); if (!m_subtree) m_subtree.reset(new SubtreeContainer); auto inserter = [this](DBObjectPtr el, SubtreeContainer &c) { DBObjectTreePtr subtree(new DBObjectTree(el, DBObjectTree::shared_from_this())); c.push_back(subtree); }; (*m_object).template get_children(session, inserter, m_subtree); } template void DBObjectTree::recurse_subtrees(db::DBSession &session, DBObjectTree::Visitor &visitor, int max_level, int level) { if (!m_subtree) fetch_subtree(session); visitor.apply(m_object, max_level, level); if (max_level != -1 && level >= max_level) return; if (m_subtree) { for (DBObjectTreePtr subtree : *m_subtree) { subtree->recurse_subtrees(session, visitor, max_level, level + 1); } } } } } #endif