From b7ad436ab6967a9d932c47ced5220cdbad4cd8d5 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Thu, 26 Jul 2007 19:16:52 +0000 Subject: Use PathTable for engine side objects. Re-implement renaming and destroying more cleanly (not to mention workingly). git-svn-id: http://svn.drobilla.net/lad/raul@638 a436a847-0d15-0410-975c-d299462d15a1 --- raul/Table.hpp | 11 ++++++----- raul/TableImpl.hpp | 14 +++++++------- 2 files changed, 13 insertions(+), 12 deletions(-) (limited to 'raul') diff --git a/raul/Table.hpp b/raul/Table.hpp index 3342bdb..4ab449c 100644 --- a/raul/Table.hpp +++ b/raul/Table.hpp @@ -33,7 +33,8 @@ namespace Raul { template class Table { public: - Table() {} + Table() : _entries() {} + Table(size_t capacity) : _entries(capacity) {} void clear() { _entries.clear(); } bool empty() const { return _entries.empty(); } @@ -56,8 +57,8 @@ public: struct iterator { iterator(Table& t, size_t i) : _table(t), _index(i) {} - inline std::pair& operator*() const { return (std::pair&)_table._entries[_index]; } - inline std::pair* operator->() const { return (std::pair*)&_table._entries[_index]; } + inline std::pair& operator*() const { return (std::pair&)_table._entries[_index]; } + inline std::pair* operator->() const { return (std::pair*)&_table._entries[_index]; } inline iterator& operator++() { ++_index; return *this; } inline iterator& operator--() { --_index; return *this; } inline bool operator==(const iterator& i) const { return _index == i._index; } @@ -79,9 +80,9 @@ public: void erase(iterator start, iterator end); void erase_by_index(size_t start, size_t end); - std::vector > yank(iterator start, iterator end); + Table yank(iterator start, iterator end); - std::pair cram(const std::vector >& range); + std::pair cram(const Table& range); const_iterator find(const K& key) const; iterator find(const K& key); diff --git a/raul/TableImpl.hpp b/raul/TableImpl.hpp index 7240950..c1ed938 100644 --- a/raul/TableImpl.hpp +++ b/raul/TableImpl.hpp @@ -127,7 +127,7 @@ template typename Table::iterator Table::find_range_end(iterator start, bool (*comp)(const K&,const K&)) { - if (size() == 0) + if (size() == 0 || start == end()) return this->end(); const K& key = start->first; @@ -180,12 +180,12 @@ Table::find_range_end(iterator start, bool (*comp)(const K&,const K&)) /** Erase and return a range of entries */ template -std::vector > +Table Table::yank(iterator start, iterator end) { - std::vector > ret(end._index - start._index); + Table ret(end._index - start._index); for (size_t i=start._index; i < end._index; ++i) - ret.at(i - start._index) = _entries[i]; + ret._entries.at(i - start._index) = _entries[i]; erase(start, end); return ret; } @@ -196,7 +196,7 @@ Table::yank(iterator start, iterator end) * Return type is the same as insert, iterator points to first inserted entry */ template std::pair::iterator, bool> -Table::cram(const std::vector >& range) +Table::cram(const Table& range) { /* FIXME: _way_ too slow */ @@ -205,7 +205,7 @@ Table::cram(const std::vector >& range) if (range.size() == 0) return std::make_pair(end(), false); - std::pair ret = insert(range.front()); + std::pair ret = insert(range._entries.front()); if (range.size() == 1) return ret; @@ -220,7 +220,7 @@ Table::cram(const std::vector >& range) new_entries.at(new_entries.size() - 1 - i) = _entries.at(size() - 1 - i); for (size_t i=1; i < range.size(); ++i) - new_entries.at(insert_index + i) = range.at(i); + new_entries.at(insert_index + i) = range._entries.at(i); _entries = new_entries; -- cgit v1.2.1