diff options
author | Max Horn | 2009-04-27 14:23:20 +0000 |
---|---|---|
committer | Max Horn | 2009-04-27 14:23:20 +0000 |
commit | e579f91b5c1b0949954037acf5bb4b364bfeb2b5 (patch) | |
tree | 3665306d61515c640885ce0bbec9b4d9c3a82d7d | |
parent | 6322478508e4a2a412efdb819b38d54c067cbbb6 (diff) | |
download | scummvm-rg350-e579f91b5c1b0949954037acf5bb4b364bfeb2b5.tar.gz scummvm-rg350-e579f91b5c1b0949954037acf5bb4b364bfeb2b5.tar.bz2 scummvm-rg350-e579f91b5c1b0949954037acf5bb4b364bfeb2b5.zip |
COMMON: Made sure Common::List and Common::array each have all front/back/push_back/push_front, as have their STL counterparts
svn-id: r40163
-rw-r--r-- | common/array.h | 25 | ||||
-rw-r--r-- | common/list.h | 28 | ||||
-rw-r--r-- | test/common/array.h | 20 | ||||
-rw-r--r-- | test/common/list.h | 19 | ||||
-rw-r--r-- | test/common/queue.h | 25 |
5 files changed, 94 insertions, 23 deletions
diff --git a/common/array.h b/common/array.h index 491ed138a2..097dcbfdca 100644 --- a/common/array.h +++ b/common/array.h @@ -76,6 +76,31 @@ public: _size += array._size; } + void pop_back() { + assert(_size > 0); + _size--; + } + + T &front() { + assert(_size > 0); + return _storage[0]; + } + + const T &front() const { + assert(_size > 0); + return _storage[0]; + } + + T &back() { + assert(_size > 0); + return _storage[_size-1]; + } + + const T &back() const { + assert(_size > 0); + return _storage[_size-1]; + } + void insert_at(int idx, const T &element) { assert(idx >= 0 && (uint)idx <= _size); ensureCapacity(_size + 1); diff --git a/common/list.h b/common/list.h index 1685843e8e..d4252db8bb 100644 --- a/common/list.h +++ b/common/list.h @@ -63,14 +63,6 @@ public: clear(); } - void push_front(const t_T &element) { - insert(begin(), element); - } - - void push_back(const t_T &element) { - insert(end(), element); - } - void insert(iterator pos, const t_T &element) { ListInternal::NodeBase *newNode = new Node(element); @@ -127,9 +119,24 @@ public: ++i; } + void push_front(const t_T &element) { + // TODO: Bypass iterators here for improved efficency + insert(begin(), element); + } + + void push_back(const t_T &element) { + // TODO: Bypass iterators here for improved efficency + insert(end(), element); + } + void pop_front() { - iterator i = begin(); - i = erase(i); + // TODO: Bypass iterators here for improved efficency + erase(begin()); + } + + void pop_back() { + // TODO: Bypass iterators here for improved efficency + erase(reverse_begin()); } t_T &front() { @@ -148,7 +155,6 @@ public: return static_cast<Node *>(_anchor._prev)->_data; } - List<t_T> &operator=(const List<t_T> &list) { if (this != &list) { iterator i; diff --git a/test/common/array.h b/test/common/array.h index 52c6529bbc..de3f0decc5 100644 --- a/test/common/array.h +++ b/test/common/array.h @@ -164,4 +164,24 @@ class ArrayTestSuite : public CxxTest::TestSuite TS_ASSERT_EQUALS( array2.size(), (unsigned int)3 ); } + + void test_front_back_push_pop() { + Common::Array<int> container; + + container.push_back( 42); + container.push_back(-23); + + TS_ASSERT_EQUALS(container.front(), 42); + TS_ASSERT_EQUALS(container.back(), -23); + + container.front() = -17; + container.back() = 163; + TS_ASSERT_EQUALS(container.front(), -17); + TS_ASSERT_EQUALS(container.back(), 163); + + container.pop_back(); + TS_ASSERT_EQUALS(container.front(), -17); + TS_ASSERT_EQUALS(container.back(), -17); + } + }; diff --git a/test/common/list.h b/test/common/list.h index 629150d554..67db1e1a42 100644 --- a/test/common/list.h +++ b/test/common/list.h @@ -168,4 +168,23 @@ class ListTestSuite : public CxxTest::TestSuite TS_ASSERT( container.begin() == container.end() ); TS_ASSERT( container.reverse_begin() == container.end() ); } + + void test_front_back_push_pop() { + Common::List<int> container; + + container.push_back( 42); + container.push_back(-23); + + TS_ASSERT_EQUALS(container.front(), 42); + TS_ASSERT_EQUALS(container.back(), -23); + + container.front() = -17; + container.back() = 163; + TS_ASSERT_EQUALS(container.front(), -17); + TS_ASSERT_EQUALS(container.back(), 163); + + container.pop_front(); + TS_ASSERT_EQUALS(container.front(), 163); + TS_ASSERT_EQUALS(container.back(), 163); + } }; diff --git a/test/common/queue.h b/test/common/queue.h index 505e056722..cadb3979d7 100644 --- a/test/common/queue.h +++ b/test/common/queue.h @@ -32,22 +32,23 @@ public: TS_ASSERT_EQUALS(queue.size(), 2); } - void test_front_back_pop() { - Common::Queue<int> queue; + void test_front_back_push_pop() { + Common::Queue<int> container; - queue.push( 42); - queue.push(-23); + container.push( 42); + container.push(-23); - TS_ASSERT_EQUALS(queue.front(), 42); - TS_ASSERT_EQUALS(queue.back(), -23); + TS_ASSERT_EQUALS(container.front(), 42); + TS_ASSERT_EQUALS(container.back(), -23); - queue.front() = -23; - queue.back() = 42; - TS_ASSERT_EQUALS(queue.front(), -23); - TS_ASSERT_EQUALS(queue.back(), 42); + container.front() = -17; + container.back() = 163; + TS_ASSERT_EQUALS(container.front(), -17); + TS_ASSERT_EQUALS(container.back(), 163); - queue.pop(); - TS_ASSERT_EQUALS(queue.front(), 42); + container.pop(); + TS_ASSERT_EQUALS(container.front(), 163); + TS_ASSERT_EQUALS(container.back(), 163); } void test_assign() { |