aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Horn2009-04-27 14:23:20 +0000
committerMax Horn2009-04-27 14:23:20 +0000
commite579f91b5c1b0949954037acf5bb4b364bfeb2b5 (patch)
tree3665306d61515c640885ce0bbec9b4d9c3a82d7d
parent6322478508e4a2a412efdb819b38d54c067cbbb6 (diff)
downloadscummvm-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.h25
-rw-r--r--common/list.h28
-rw-r--r--test/common/array.h20
-rw-r--r--test/common/list.h19
-rw-r--r--test/common/queue.h25
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() {