aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common/hashmap.h8
-rw-r--r--test/common/hashmap.h18
2 files changed, 25 insertions, 1 deletions
diff --git a/common/hashmap.h b/common/hashmap.h
index 2a50bff07a..25381b92a7 100644
--- a/common/hashmap.h
+++ b/common/hashmap.h
@@ -220,6 +220,7 @@ public:
Val &getVal(const Key &key);
const Val &getVal(const Key &key) const;
+ const Val &getVal(const Key &key, const Val &defaultVal) const;
void setVal(const Key &key, const Val &val);
void clear(bool shrinkArray = 0);
@@ -555,11 +556,16 @@ Val &HashMap<Key, Val, HashFunc, EqualFunc>::getVal(const Key &key) {
template<class Key, class Val, class HashFunc, class EqualFunc>
const Val &HashMap<Key, Val, HashFunc, EqualFunc>::getVal(const Key &key) const {
+ return getVal(key, _defaultVal);
+}
+
+template<class Key, class Val, class HashFunc, class EqualFunc>
+const Val &HashMap<Key, Val, HashFunc, EqualFunc>::getVal(const Key &key, const Val &defaultVal) const {
uint ctr = lookup(key);
if (_storage[ctr] != NULL)
return _storage[ctr]->_value;
else
- return _defaultVal;
+ return defaultVal;
}
template<class Key, class Val, class HashFunc, class EqualFunc>
diff --git a/test/common/hashmap.h b/test/common/hashmap.h
index 6476005eaf..03db5518c0 100644
--- a/test/common/hashmap.h
+++ b/test/common/hashmap.h
@@ -86,6 +86,24 @@ class HashMapTestSuite : public CxxTest::TestSuite
TS_ASSERT_EQUALS(container[4], 96);
}
+ void test_lookup_with_default() {
+ Common::HashMap<int, int> container;
+ container[0] = 17;
+ container[1] = -1;
+ container[2] = 45;
+ container[3] = 12;
+ container[4] = 96;
+
+ // We take a const ref now to ensure that the map
+ // is not modified by getVal.
+ const Common::HashMap<int, int> &containerRef = container;
+
+ TS_ASSERT_EQUALS(containerRef.getVal(0), 17);
+ TS_ASSERT_EQUALS(containerRef.getVal(17), 0);
+ TS_ASSERT_EQUALS(containerRef.getVal(0, -10), 17);
+ TS_ASSERT_EQUALS(containerRef.getVal(17, -10), -10);
+ }
+
void test_iterator_begin_end() {
Common::HashMap<int, int> container;