mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-21 03:31:40 +00:00
add functions for reverse iteration of Common::List
svn-id: r22665
This commit is contained in:
parent
da7140c3cf
commit
20c4be47a3
@ -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);
|
||||
}
|
||||
|
@ -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() );
|
||||
}
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user