Store::const_iterator Store::children_end(SharedPtr<const GraphObject> o) const { const_iterator parent = find(o->path()); assert(parent != end()); return find_descendants_end(parent); }
void Store::remove(const iterator top, Objects& removed) { if (top != end()) { const iterator descendants_end = find_descendants_end(top); removed.insert(top, descendants_end); erase(top, descendants_end); } }
Store::const_range Store::children_range(SPtr<const Node> o) const { const const_iterator parent = find(o->path()); if (parent != end()) { const_iterator first_child = parent; ++first_child; return std::make_pair(first_child, find_descendants_end(parent)); } return make_pair(end(), end()); }
SharedPtr<GraphObject> Store::find_child(SharedPtr<const GraphObject> parent, const string& child_name) const { const_iterator pi = find(parent->path()); assert(pi != end()); const_iterator children_end = find_descendants_end(pi); const_iterator child = find(pi, children_end, parent->path().base() + child_name); if (child != end()) return child->second; else return SharedPtr<GraphObject>(); }