summaryrefslogtreecommitdiffstats
path: root/src/Store.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2012-08-14 14:36:51 +0000
committerDavid Robillard <d@drobilla.net>2012-08-14 14:36:51 +0000
commita8312be2d849b73ff0acc80a226095bcfee3556c (patch)
treebb5d7de6c3fd8b5ac121ec023e46a90ddc24abb0 /src/Store.cpp
parent50f85edbd0f07135eb73201367bbd256792ee999 (diff)
downloadingen-a8312be2d849b73ff0acc80a226095bcfee3556c.tar.gz
ingen-a8312be2d849b73ff0acc80a226095bcfee3556c.tar.bz2
ingen-a8312be2d849b73ff0acc80a226095bcfee3556c.zip
Saner/faster Store interface for finding children.
git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@4694 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/Store.cpp')
-rw-r--r--src/Store.cpp37
1 files changed, 9 insertions, 28 deletions
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<const GraphObject> o) const
+Store::const_range
+Store::children_range(SharedPtr<const GraphObject> o) const
{
- const_iterator parent = find(o->path());
- assert(parent != end());
- ++parent;
- return parent;
-}
-
-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);
-}
-
-SharedPtr<GraphObject>
-Store::find_child(SharedPtr<const GraphObject> 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<GraphObject>();
+ 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