diff options
author | David Robillard <d@drobilla.net> | 2007-10-08 02:57:21 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2007-10-08 02:57:21 +0000 |
commit | 12a89783ef087052d73ddcbf065fe08901333f34 (patch) | |
tree | ba9ff1d0b0e833f18edde6434b4e3da157e21c09 | |
parent | 75f1691ccbb67ec5c718c28fbdedf8dbcc5912bf (diff) | |
download | raul-12a89783ef087052d73ddcbf065fe08901333f34.tar.gz raul-12a89783ef087052d73ddcbf065fe08901333f34.tar.bz2 raul-12a89783ef087052d73ddcbf065fe08901333f34.zip |
Eliminate redundant object collections (ObjectModel having a separate collection of its children).
Fix renaming/creation of children (fix ticket 97).
git-svn-id: http://svn.drobilla.net/lad/raul@844 a436a847-0d15-0410-975c-d299462d15a1
-rw-r--r-- | raul/Table.hpp | 3 | ||||
-rw-r--r-- | raul/TableImpl.hpp | 13 |
2 files changed, 14 insertions, 2 deletions
diff --git a/raul/Table.hpp b/raul/Table.hpp index 1d20a9c..fa3848c 100644 --- a/raul/Table.hpp +++ b/raul/Table.hpp @@ -86,7 +86,10 @@ public: std::pair<iterator, bool> cram(const Table<K, T>& range); + const_iterator find(const_iterator start, const_iterator end, const K& key) const; const_iterator find(const K& key) const; + + iterator find(iterator start, iterator end, const K& key); iterator find(const K& key); const_iterator find_range_end(const_iterator left, bool (*comp)(const K&,const K&)) const; diff --git a/raul/TableImpl.hpp b/raul/TableImpl.hpp index 1bb4699..d01c0ca 100644 --- a/raul/TableImpl.hpp +++ b/raul/TableImpl.hpp @@ -66,11 +66,20 @@ template <typename K, typename T> typename Table<K,T>::iterator Table<K,T>::find(const K& key) { + return find(begin(), end(), key); +} + + +/** Binary search (O(log(end - start))) */ +template <typename K, typename T> +typename Table<K,T>::iterator +Table<K,T>::find(iterator start, iterator finish, const K& key) +{ if (size() == 0) return end(); - size_t lower = 0; - size_t upper = size() - 1; + size_t lower = start._index; + size_t upper = finish._index - 1; size_t i; while (upper >= lower) { |