Bläddra i källkod

De-duplicating code for operator[].
Adding test case to be more comprehensive about operator==.

Samuel Jaffe 8 år sedan
förälder
incheckning
6d9408f0e4
2 ändrade filer med 10 tillägg och 5 borttagningar
  1. 9 0
      trie.t.h
  2. 1 5
      trie_impl.hpp

+ 9 - 0
trie.t.h

@@ -57,6 +57,15 @@ public:
     TS_ASSERT_DIFFERS(data, copy);
   }
   
+  void testEqualsConsidersPaths() {
+    trie<int, int> messed;
+    messed = -1;
+    messed[0] = 5;
+    messed[1] = 2;
+    messed[{0, 2}] = 4;
+    TS_ASSERT_DIFFERS(data, messed);
+  }
+  
   void testInsertNewElementOutputsTrue() {
     trie<int, int> test;
     auto pair = test.insert(1, 2);

+ 1 - 5
trie_impl.hpp

@@ -78,11 +78,7 @@ auto trie<K, V, C>::operator[](key_type const & key) -> self_t & {
 // Operations: O(d*log(n/d))
 template <typename K, typename V, typename C>
 auto trie<K, V, C>::operator[](std::initializer_list<key_type> keys) -> self_t & {
-  self_t * rec = this;
-  for ( key_type const & key : keys ) {
-    rec = &(*rec)[key];
-  }
-  return *rec;
+  return operator[]<std::initializer_list<key_type>>(keys);
 }
 
 template <typename K, typename V, typename C>