add functions for reverse iteration of Common::List

svn-id: r22665
This commit is contained in:
Willem Jan Palenstijn 2006-05-26 17:18:23 +00:00
parent da7140c3cf
commit 20c4be47a3
2 changed files with 63 additions and 0 deletions

View File

@ -174,6 +174,18 @@ public:
return iterator(next);
}
iterator reverse_erase(iterator pos) {
assert(pos != end());
NodeBase *next = pos._node->_next;
NodeBase *prev = pos._node->_prev;
Node<T> *node = static_cast<Node<T> *>(pos._node);
prev->_next = next;
next->_prev = prev;
delete node;
return iterator(prev);
}
iterator erase(iterator first, iterator last) {
while (first != last)
erase(first++);
@ -229,6 +241,10 @@ public:
return iterator(_anchor->_next);
}
iterator reverse_begin() {
return iterator(_anchor->_prev);
}
iterator end() {
return iterator(_anchor);
}
@ -237,6 +253,10 @@ public:
return const_iterator(_anchor->_next);
}
const_iterator reverse_begin() const {
return const_iterator(_anchor->_prev);
}
const_iterator end() const {
return const_iterator(_anchor);
}

View File

@ -103,4 +103,47 @@ class ListTestSuite : public CxxTest::TestSuite
++iter;
TS_ASSERT( iter == container.end() );
}
void test_reverse( void )
{
Common::List<int> container;
Common::List<int>::iterator iter;
// Fill the container with some random data
container.push_back(17);
container.push_back(33);
container.push_back(-11);
iter = container.reverse_begin();
TS_ASSERT( iter != container.end() );
TS_ASSERT( *iter == -11 );
--iter;
TS_ASSERT( iter != container.end() );
TS_ASSERT( *iter == 33 );
--iter;
TS_ASSERT( iter != container.end() );
TS_ASSERT( *iter == 17 );
--iter;
TS_ASSERT( iter == container.end() );
iter = container.reverse_begin();
iter = container.reverse_erase(iter);
TS_ASSERT( iter != container.end() );
TS_ASSERT( *iter == 33 );
iter = container.reverse_erase(iter);
TS_ASSERT( iter != container.end() );
TS_ASSERT( *iter == 17 );
iter = container.reverse_erase(iter);
TS_ASSERT( iter == container.end() );
TS_ASSERT( container.begin() == container.end() );
TS_ASSERT( container.reverse_begin() == container.end() );
}
};