summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2007-07-26 19:16:52 +0000
committerDavid Robillard <d@drobilla.net>2007-07-26 19:16:52 +0000
commitb7ad436ab6967a9d932c47ced5220cdbad4cd8d5 (patch)
tree95a47f87abc79f2ee2a7c04b865579d60ea1493f
parentdfcc6b65f887e3afcb3aa35eb7b15b7d7ffb972e (diff)
downloadraul-b7ad436ab6967a9d932c47ced5220cdbad4cd8d5.tar.gz
raul-b7ad436ab6967a9d932c47ced5220cdbad4cd8d5.tar.bz2
raul-b7ad436ab6967a9d932c47ced5220cdbad4cd8d5.zip
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
-rw-r--r--raul/Table.hpp11
-rw-r--r--raul/TableImpl.hpp14
-rw-r--r--tests/table_test.cpp2
3 files changed, 14 insertions, 13 deletions
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 <typename K, typename T>
class Table {
public:
- Table<K, T>() {}
+ Table<K, T>() : _entries() {}
+ Table<K, T>(size_t capacity) : _entries(capacity) {}
void clear() { _entries.clear(); }
bool empty() const { return _entries.empty(); }
@@ -56,8 +57,8 @@ public:
struct iterator {
iterator(Table<K,T>& t, size_t i) : _table(t), _index(i) {}
- inline std::pair<const K, T>& operator*() const { return (std::pair<const K, T>&)_table._entries[_index]; }
- inline std::pair<const K, T>* operator->() const { return (std::pair<const K, T>*)&_table._entries[_index]; }
+ inline std::pair<K, T>& operator*() const { return (std::pair<K, T>&)_table._entries[_index]; }
+ inline std::pair<K, T>* operator->() const { return (std::pair<K, T>*)&_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<std::pair<K, T> > yank(iterator start, iterator end);
+ Table<K, T> yank(iterator start, iterator end);
- std::pair<iterator, bool> cram(const std::vector<std::pair<K, T> >& range);
+ std::pair<iterator, bool> cram(const Table<K, T>& 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 K, typename T>
typename Table<K,T>::iterator
Table<K,T>::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<K,T>::find_range_end(iterator start, bool (*comp)(const K&,const K&))
/** Erase and return a range of entries */
template <typename K, typename T>
-std::vector<std::pair<K, T> >
+Table<K, T>
Table<K, T>::yank(iterator start, iterator end)
{
- std::vector<std::pair<K, T> > ret(end._index - start._index);
+ Table<K, T> 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<K, T>::yank(iterator start, iterator end)
* Return type is the same as insert, iterator points to first inserted entry */
template <typename K, typename T>
std::pair<typename Table<K,T>::iterator, bool>
-Table<K, T>::cram(const std::vector<std::pair<K, T> >& range)
+Table<K, T>::cram(const Table<K,T>& range)
{
/* FIXME: _way_ too slow */
@@ -205,7 +205,7 @@ Table<K, T>::cram(const std::vector<std::pair<K, T> >& range)
if (range.size() == 0)
return std::make_pair(end(), false);
- std::pair<iterator, bool> ret = insert(range.front());
+ std::pair<iterator, bool> ret = insert(range._entries.front());
if (range.size() == 1)
return ret;
@@ -220,7 +220,7 @@ Table<K, T>::cram(const std::vector<std::pair<K, T> >& 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;
diff --git a/tests/table_test.cpp b/tests/table_test.cpp
index 4628474..19fd576 100644
--- a/tests/table_test.cpp
+++ b/tests/table_test.cpp
@@ -128,7 +128,7 @@ main()
PathTable<char>::iterator quux_end = pt.find_descendants_end(quux );
assert(quux_end != quux);
- std::vector<std::pair<Path,char> > yanked = pt.yank(quux, quux_end);
+ Table<Path,char> yanked = pt.yank(quux, quux_end);
cout << "Yanked " << yank_path << endl;
for (PathTable<char>::const_iterator i = pt.begin(); i != pt.end(); ++i)