From a8312be2d849b73ff0acc80a226095bcfee3556c Mon Sep 17 00:00:00 2001 From: David Robillard Date: Tue, 14 Aug 2012 14:36:51 +0000 Subject: Saner/faster Store interface for finding children. git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@4694 a436a847-0d15-0410-975c-d299462d15a1 --- src/Store.cpp | 37 +++++++++---------------------------- 1 file changed, 9 insertions(+), 28 deletions(-) (limited to 'src/Store.cpp') diff --git a/src/Store.cpp b/src/Store.cpp index c0cb71b8..ae7770ac 100644 --- a/src/Store.cpp +++ b/src/Store.cpp @@ -42,35 +42,16 @@ Store::add(GraphObject* o) } } -Store::const_iterator -Store::children_begin(SharedPtr o) const +Store::const_range +Store::children_range(SharedPtr o) const { - const_iterator parent = find(o->path()); - assert(parent != end()); - ++parent; - return parent; -} - -Store::const_iterator -Store::children_end(SharedPtr o) const -{ - const_iterator parent = find(o->path()); - assert(parent != end()); - return find_descendants_end(parent); -} - -SharedPtr -Store::find_child(SharedPtr parent, - const Raul::Symbol& symbol) 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().child(symbol)); - if (child != end()) - return child->second; - else - return SharedPtr(); + 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()); } unsigned -- cgit v1.2.1