[Groonga-commit] groonga/grnxx at ad1b506 [master] Use grnxx::Exception for error handling.

Back to archive index

susumu.yata null+****@clear*****
Thu Jul 4 11:34:33 JST 2013


susumu.yata	2013-07-04 11:34:33 +0900 (Thu, 04 Jul 2013)

  New Revision: ad1b506416d3e55444af4d17953698d379093110
  https://github.com/groonga/grnxx/commit/ad1b506416d3e55444af4d17953698d379093110

  Message:
    Use grnxx::Exception for error handling.

  Modified files:
    lib/grnxx/map/array_map.cpp
    lib/grnxx/map/bytes_array.cpp
    lib/grnxx/map/hash_table.cpp
    lib/grnxx/map/hash_table.hpp
    lib/grnxx/map/hash_table/key_id_array.hpp
    lib/grnxx/map/key_store.cpp
    lib/grnxx/map/patricia.cpp
    test/test_map.cpp

  Modified: lib/grnxx/map/array_map.cpp (+21 -52)
===================================================================
--- lib/grnxx/map/array_map.cpp    2013-07-04 10:38:22 +0900 (763b9fc)
+++ lib/grnxx/map/array_map.cpp    2013-07-04 11:34:33 +0900 (2ed6067)
@@ -90,25 +90,19 @@ bool ArrayMap<T>::get(int64_t key_id, Key *key) {
     return false;
   }
   bool bit;
-  if (!keys_->get_bit(key_id, &bit)) {
-    // Error.
-    return false;
-  }
+  keys_->get_bit(key_id, &bit);
   if (!bit) {
     // Not found.
     return false;
   }
-  if (!keys_->get_key(key_id, key)) {
-    // Error.
-    return false;
-  }
+  keys_->get_key(key_id, key);
   return true;
 }
 
 template <typename T>
 bool ArrayMap<T>::unset(int64_t key_id) {
   if (!keys_->unset(key_id)) {
-    // Not found or error.
+    // Not found.
     return false;
   }
   return true;
@@ -117,17 +111,14 @@ bool ArrayMap<T>::unset(int64_t key_id) {
 template <typename T>
 bool ArrayMap<T>::reset(int64_t key_id, KeyArg dest_key) {
   if (!get(key_id)) {
-    // Not found or error.
+    // Not found.
     return false;
   }
   if (find(dest_key)) {
     // Found.
     return false;
   }
-  if (!keys_->reset(key_id, Helper<T>::normalize(dest_key))) {
-    // Error.
-    return false;
-  }
+  keys_->reset(key_id, Helper<T>::normalize(dest_key));
   return true;
 }
 
@@ -136,16 +127,10 @@ bool ArrayMap<T>::find(KeyArg key, int64_t *key_id) {
   const Key normalized_key = map::Helper<T>::normalize(key);
   for (int64_t i = MAP_MIN_KEY_ID; i <= max_key_id(); ++i) {
     bool bit;
-    if (!keys_->get_bit(i, &bit)) {
-      // Error.
-      return false;
-    }
+    keys_->get_bit(i, &bit);
     if (bit) {
       Key stored_key;
-      if (!keys_->get_key(i, &stored_key)) {
-        // Error.
-        return false;
-      }
+      keys_->get_key(i, &stored_key);
       if (Helper<T>::equal_to(normalized_key, stored_key)) {
         // Found.
         if (key_id) {
@@ -163,16 +148,10 @@ bool ArrayMap<T>::add(KeyArg key, int64_t *key_id) {
   const Key normalized_key = Helper<T>::normalize(key);
   for (int64_t i = MAP_MIN_KEY_ID; i <= max_key_id(); ++i) {
     bool bit;
-    if (!keys_->get_bit(i, &bit)) {
-      // Error.
-      return false;
-    }
+    keys_->get_bit(i, &bit);
     if (bit) {
       Key stored_key;
-      if (!keys_->get_key(i, &stored_key)) {
-        // Error.
-        return false;
-      }
+      keys_->get_key(i, &stored_key);
       if (Helper<T>::equal_to(normalized_key, stored_key)) {
         // Found.
         if (key_id) {
@@ -182,10 +161,7 @@ bool ArrayMap<T>::add(KeyArg key, int64_t *key_id) {
       }
     }
   }
-  if (!keys_->add(normalized_key, key_id)) {
-    // Error.
-    return false;
-  }
+  keys_->add(normalized_key, key_id);
   return true;
 }
 
@@ -193,12 +169,13 @@ template <typename T>
 bool ArrayMap<T>::remove(KeyArg key) {
   int64_t key_id;
   if (!find(key, &key_id)) {
-    // Not found or error.
+    // Not found.
     return false;
   }
   if (!keys_->unset(key_id)) {
-    // Error.
-    return false;
+    GRNXX_ERROR() << "failed to remove: key = " << key
+                  << ", key_id = " << key_id;
+    throw LogicError();
   }
   return true;
 }
@@ -210,22 +187,16 @@ bool ArrayMap<T>::replace(KeyArg src_key, KeyArg dest_key, int64_t *key_id) {
   int64_t src_key_id = MAP_INVALID_KEY_ID;
   for (int64_t i = MAP_MIN_KEY_ID; i <= max_key_id(); ++i) {
     bool bit;
-    if (!keys_->get_bit(i, &bit)) {
-      // Error.
-      return false;
-    }
+    keys_->get_bit(i, &bit);
     if (bit) {
       Key stored_key;
-      if (!keys_->get_key(i, &stored_key)) {
-        // Error.
-        return false;
-      }
+      keys_->get_key(i, &stored_key);
       if (Helper<T>::equal_to(normalized_src_key, stored_key)) {
-        // Found.
+        // Source key found.
         src_key_id = i;
       }
       if (Helper<T>::equal_to(normalized_dest_key, stored_key)) {
-        // Found.
+        // Destination key found.
         return false;
       }
     }
@@ -234,10 +205,7 @@ bool ArrayMap<T>::replace(KeyArg src_key, KeyArg dest_key, int64_t *key_id) {
     // Not found.
     return false;
   }
-  if (!keys_->reset(src_key_id, normalized_dest_key)) {
-    // Error.
-    return false;
-  }
+  keys_->reset(src_key_id, normalized_dest_key);
   if (key_id) {
     *key_id = src_key_id;
   }
@@ -246,7 +214,8 @@ bool ArrayMap<T>::replace(KeyArg src_key, KeyArg dest_key, int64_t *key_id) {
 
 template <typename T>
 bool ArrayMap<T>::truncate() {
-  return keys_->truncate();
+  keys_->truncate();
+  return true;
 }
 
 template <typename T>

  Modified: lib/grnxx/map/bytes_array.cpp (+7 -13)
===================================================================
--- lib/grnxx/map/bytes_array.cpp    2013-07-04 10:38:22 +0900 (eb7963f)
+++ lib/grnxx/map/bytes_array.cpp    2013-07-04 11:34:33 +0900 (1a812bd)
@@ -83,14 +83,12 @@ bool BytesArray::unlink(Storage *storage, uint32_t storage_node_id) {
 
 bool BytesArray::get(uint64_t value_id, Value *value) {
   uint64_t bytes_id;
-  if (!ids_->get(value_id, &bytes_id)) {
-    return false;
-  }
+  ids_->get(value_id, &bytes_id);
   if (value) {
     if (bytes_id == BYTES_STORE_INVALID_BYTES_ID) {
       *value = default_value_;
     } else {
-      return store_->get(bytes_id, value);
+      store_->get(bytes_id, value);
     }
   }
   return true;
@@ -98,18 +96,14 @@ bool BytesArray::get(uint64_t value_id, Value *value) {
 
 bool BytesArray::set(uint64_t value_id, ValueArg value) {
   uint64_t *src_bytes_id = ids_->get_pointer(value_id);
-  if (!src_bytes_id) {
-    return false;
-  }
   uint64_t dest_bytes_id;
-  if (!store_->add(value, &dest_bytes_id)) {
-    return false;
-  }
+  store_->add(value, &dest_bytes_id);
   if (*src_bytes_id != BYTES_STORE_INVALID_BYTES_ID) {
-    if (!store_->unset(*src_bytes_id)) {
-      // The following unset() may not fail due to the above add().
+    try {
+      store_->unset(*src_bytes_id);
+    } catch (...) {
       store_->unset(dest_bytes_id);
-      return false;
+      throw;
     }
   }
   *src_bytes_id = dest_bytes_id;

  Modified: lib/grnxx/map/hash_table.cpp (+60 -134)
===================================================================
--- lib/grnxx/map/hash_table.cpp    2013-07-04 10:38:22 +0900 (0bb2fcc)
+++ lib/grnxx/map/hash_table.cpp    2013-07-04 11:34:33 +0900 (14dcd63)
@@ -102,31 +102,26 @@ bool HashTable<T>::get(int64_t key_id, Key *key) {
     return false;
   }
   bool bit;
-  if (!keys_->get_bit(key_id, &bit)) {
-    // Error.
-    return false;
-  }
+  keys_->get_bit(key_id, &bit);
   if (!bit) {
     // Not found.
     return false;
   }
-  return keys_->get_key(key_id, key);
+  keys_->get_key(key_id, key);
+  return true;
 }
 
 template <typename T>
 bool HashTable<T>::unset(int64_t key_id) {
-  if (!refresh_key_ids()) {
-    // Error.
-    return false;
-  }
+  refresh_key_ids();
   int64_t *stored_key_id;
   if (!find_key_id(key_id, &stored_key_id)) {
-    // Not found or error.
+    // Not found.
     return false;
   }
   if (!keys_->unset(key_id)) {
-    // Error.
-    return false;
+    GRNXX_ERROR() << "failed to unset: key_id = " << key_id;
+    throw LogicError();
   }
   *stored_key_id = -1;
   return true;
@@ -134,30 +129,24 @@ bool HashTable<T>::unset(int64_t key_id) {
 
 template <typename T>
 bool HashTable<T>::reset(int64_t key_id, KeyArg dest_key) {
-  if (!refresh_key_ids()) {
-    // Error.
-    return false;
-  }
+  refresh_key_ids();
   Key src_key;
   if (!get(key_id, &src_key)) {
-    // Not found or error.
+    // Not found.
     return false;
   }
   int64_t *src_key_id;
   if (!find_key_id(key_id, &src_key_id)) {
-    // Not found or error.
+    // Not found.
     return false;
   }
   const Key dest_normalized_key = Helper<T>::normalize(dest_key);
   int64_t *dest_key_id;
   if (find_key(dest_normalized_key, &dest_key_id)) {
-    // Found or error.
-    return false;
-  }
-  if (!keys_->reset(key_id, dest_normalized_key)) {
-    // Error.
+    // Found.
     return false;
   }
+  keys_->reset(key_id, dest_normalized_key);
   if (*dest_key_id == MAP_INVALID_KEY_ID) {
     ++header_->num_key_ids;
   }
@@ -168,14 +157,11 @@ bool HashTable<T>::reset(int64_t key_id, KeyArg dest_key) {
 
 template <typename T>
 bool HashTable<T>::find(KeyArg key, int64_t *key_id) {
-  if (!refresh_key_ids()) {
-    // Error.
-    return false;
-  }
+  refresh_key_ids();
   const Key normalized_key = Helper<T>::normalize(key);
   int64_t *stored_key_id;
   if (!find_key(normalized_key, &stored_key_id)) {
-    // Not found or error.
+    // Not found.
     return false;
   }
   if (key_id) {
@@ -186,17 +172,11 @@ bool HashTable<T>::find(KeyArg key, int64_t *key_id) {
 
 template <typename T>
 bool HashTable<T>::add(KeyArg key, int64_t *key_id) {
-  if (!refresh_key_ids()) {
-    // Error.
-    return false;
-  }
+  refresh_key_ids();
   // Rebuild the hash table if the filling rate is greater than 62.5%.
   const uint64_t key_ids_size = key_ids_->mask() + 1;
   if (header_->num_key_ids > ((key_ids_size + (key_ids_size / 4)) / 2)) {
-    if (!rebuild()) {
-      // Error.
-      return false;
-    }
+    rebuild();
   }
   const Key normalized_key = Helper<T>::normalize(key);
   int64_t *stored_key_id;
@@ -211,10 +191,7 @@ bool HashTable<T>::add(KeyArg key, int64_t *key_id) {
     return false;
   }
   int64_t next_key_id;
-  if (!keys_->add(normalized_key, &next_key_id)) {
-    // Error.
-    return false;
-  }
+  keys_->add(normalized_key, &next_key_id);
   if (*stored_key_id == MAP_INVALID_KEY_ID) {
     ++header_->num_key_ids;
   }
@@ -227,19 +204,17 @@ bool HashTable<T>::add(KeyArg key, int64_t *key_id) {
 
 template <typename T>
 bool HashTable<T>::remove(KeyArg key) {
-  if (!refresh_key_ids()) {
-    // Error.
-    return false;
-  }
+  refresh_key_ids();
   const Key normalized_key = Helper<T>::normalize(key);
   int64_t *stored_key_id;
   if (!find_key(normalized_key, &stored_key_id)) {
-    // Not found or error.
+    // Not found.
     return false;
   }
   if (!keys_->unset(*stored_key_id)) {
-    // Error.
-    return false;
+    GRNXX_ERROR() << "failed to remove: key = " << key
+                  << ", key_id = " << *stored_key_id;
+    throw LogicError();
   }
   *stored_key_id = -1;
   return true;
@@ -247,26 +222,20 @@ bool HashTable<T>::remove(KeyArg key) {
 
 template <typename T>
 bool HashTable<T>::replace(KeyArg src_key, KeyArg dest_key, int64_t *key_id) {
-  if (!refresh_key_ids()) {
-    // Error.
-    return false;
-  }
+  refresh_key_ids();
   const Key src_normalized_key = Helper<T>::normalize(src_key);
   int64_t *src_key_id;
   if (!find_key(src_normalized_key, &src_key_id)) {
-    // Not found or error.
+    // Not found.
     return false;
   }
   const Key dest_normalized_key = Helper<T>::normalize(dest_key);
   int64_t *dest_key_id;
   if (find_key(dest_normalized_key, &dest_key_id)) {
-    // Found or error.
-    return false;
-  }
-  if (!keys_->reset(*src_key_id, dest_normalized_key)) {
-    // Error.
+    // Found.
     return false;
   }
+  keys_->reset(*src_key_id, dest_normalized_key);
   if (*dest_key_id == MAP_INVALID_KEY_ID) {
     ++header_->num_key_ids;
   }
@@ -280,9 +249,7 @@ bool HashTable<T>::replace(KeyArg src_key, KeyArg dest_key, int64_t *key_id) {
 
 template <typename T>
 bool HashTable<T>::truncate() {
-  if (!refresh_key_ids()) {
-    return false;
-  }
+  refresh_key_ids();
   if (max_key_id() == MAP_MIN_KEY_ID) {
     // Nothing to do.
     return true;
@@ -290,21 +257,15 @@ bool HashTable<T>::truncate() {
   std::unique_ptr<KeyIDArray> new_key_ids(
       KeyIDArray::create(storage_, storage_node_id_,
                          KeyIDArray::page_size() - 1));
-  if (!new_key_ids) {
-    // Error.
-    return false;
-  }
-  if (header_->old_key_ids_storage_node_id != STORAGE_INVALID_NODE_ID) {
+  if (header_->old_key_ids_storage_node_id != STORAGE_INVALID_NODE_ID) try {
     if (!KeyIDArray::unlink(storage_, header_->old_key_ids_storage_node_id)) {
-      // Error.
-      KeyIDArray::unlink(storage_, new_key_ids->storage_node_id());
-      return false;
+      throw LogicError();
     }
+  } catch (...) {
+    KeyIDArray::unlink(storage_, new_key_ids->storage_node_id());
+    throw;
   }
-  if (!keys_->truncate()) {
-    // Error.
-    return false;
-  }
+  keys_->truncate();
   header_->num_key_ids = 0;
   header_->old_key_ids_storage_node_id = header_->key_ids_storage_node_id;
   header_->key_ids_storage_node_id = new_key_ids->storage_node_id();
@@ -357,16 +318,12 @@ bool HashTable<T>::find_key_id(int64_t key_id, int64_t **stored_key_id) {
   KeyIDArray * const key_ids = key_ids_.get();
   Key stored_key;
   if (!get(key_id, &stored_key)) {
-    // Not found or error.
+    // Not found.
     return false;
   }
   const uint64_t first_hash = Hash<T>()(stored_key);
   for (uint64_t hash = first_hash; ; ) {
     *stored_key_id = key_ids->get_pointer(hash);
-    if (!*stored_key_id) {
-      // Error.
-      return false;
-    }
     if (**stored_key_id == key_id) {
       // Found.
       return true;
@@ -375,7 +332,7 @@ bool HashTable<T>::find_key_id(int64_t key_id, int64_t **stored_key_id) {
     if (hash == first_hash) {
       // Critical error.
       GRNXX_ERROR() << "endless loop";
-      return false;
+      throw LogicError();
     }
   }
 }
@@ -387,10 +344,6 @@ bool HashTable<T>::find_key(KeyArg key, int64_t **stored_key_id) {
   const uint64_t first_hash = Hash<T>()(key);
   for (uint64_t hash = first_hash; ; ) {
     int64_t * const key_id = key_ids->get_pointer(hash);
-    if (!key_id) {
-      // Error.
-      return false;
-    }
     if (*key_id == MAP_INVALID_KEY_ID) {
       // Not found.
       if (!*stored_key_id) {
@@ -404,10 +357,7 @@ bool HashTable<T>::find_key(KeyArg key, int64_t **stored_key_id) {
       }
     } else {
       Key stored_key;
-      if (!keys_->get_key(*key_id, &stored_key)) {
-        // Error.
-        return false;
-      }
+      keys_->get_key(*key_id, &stored_key);
       if (Helper<T>::equal_to(stored_key, key)) {
         // Found.
         *stored_key_id = key_id;
@@ -418,13 +368,13 @@ bool HashTable<T>::find_key(KeyArg key, int64_t **stored_key_id) {
     if (hash == first_hash) {
       // Critical error.
       GRNXX_ERROR() << "endless loop";
-      return false;
+      throw LogicError();
     }
   }
 }
 
 template <typename T>
-bool HashTable<T>::rebuild() {
+void HashTable<T>::rebuild() {
   uint64_t new_size = num_keys() * 2;
   if (new_size < key_ids_->page_size()) {
     new_size = key_ids_->page_size();
@@ -434,54 +384,36 @@ bool HashTable<T>::rebuild() {
     // Critical error.
     GRNXX_ERROR() << "too large table: size = " << new_size
                   << ", max_size = " << key_ids_->size();
-    return false;
+    throw LogicError();
   }
   const uint64_t new_mask = new_size - 1;
   // Create a new hash table.
   std::unique_ptr<KeyIDArray> new_key_ids(
       KeyIDArray::create(storage_, storage_node_id_, new_mask));
-  if (!new_key_ids) {
-    // Error.
-    return false;
-  }
-  // Copy keys from the current hash table to the new one.
-  int64_t key_id;
-  for (key_id = MAP_MIN_KEY_ID; key_id <= max_key_id(); ++key_id) {
-    bool bit;
-    if (!keys_->get_bit(key_id, &bit)) {
-      // Error.
-      break;
-    }
-    if (!bit) {
-      continue;
-    }
-    Key stored_key;
-    if (!keys_->get_key(key_id, &stored_key)) {
-      // Error.
-      break;
-    }
-    const uint64_t first_hash = Hash<T>()(stored_key);
-    int64_t *stored_key_id;
-    for (uint64_t hash = first_hash; ; hash = rehash(hash)) {
-      stored_key_id = new_key_ids->get_pointer(hash);
-      if (!stored_key_id) {
-        // Error.
-        break;
+  try {
+    // Copy keys from the current hash table to the new one.
+    int64_t key_id;
+    for (key_id = MAP_MIN_KEY_ID; key_id <= max_key_id(); ++key_id) {
+      bool bit;
+      keys_->get_bit(key_id, &bit);
+      if (!bit) {
+        continue;
       }
-      if (*stored_key_id == MAP_INVALID_KEY_ID) {
-        *stored_key_id = key_id;
-        break;
+      Key stored_key;
+      keys_->get_key(key_id, &stored_key);
+      const uint64_t first_hash = Hash<T>()(stored_key);
+      int64_t *stored_key_id;
+      for (uint64_t hash = first_hash; ; hash = rehash(hash)) {
+        stored_key_id = new_key_ids->get_pointer(hash);
+        if (*stored_key_id == MAP_INVALID_KEY_ID) {
+          *stored_key_id = key_id;
+          break;
+        }
       }
     }
-    if (!stored_key_id) {
-      // Error.
-      break;
-    }
-  }
-  if (key_id <= max_key_id()) {
-    // Error.
+  } catch (...) {
     KeyIDArray::unlink(storage_, new_key_ids->storage_node_id());
-    return false;
+    throw;
   }
   if (header_->old_key_ids_storage_node_id != STORAGE_INVALID_NODE_ID) {
     KeyIDArray::unlink(storage_, header_->old_key_ids_storage_node_id);
@@ -493,7 +425,6 @@ bool HashTable<T>::rebuild() {
     old_key_ids_.swap(new_key_ids);
     key_ids_.swap(old_key_ids_);
   }
-  return true;
 }
 
 template <typename T>
@@ -502,21 +433,16 @@ uint64_t HashTable<T>::rehash(uint64_t hash) const {
 }
 
 template <typename T>
-bool HashTable<T>::refresh_key_ids() {
+void HashTable<T>::refresh_key_ids() {
   if (key_ids_->storage_node_id() != header_->key_ids_storage_node_id) {
     Lock lock(&header_->mutex);
     if (key_ids_->storage_node_id() != header_->key_ids_storage_node_id) {
       std::unique_ptr<KeyIDArray> new_key_ids(
           KeyIDArray::open(storage_, header_->key_ids_storage_node_id));
-      if (!new_key_ids) {
-        // Error.
-        return false;
-      }
       old_key_ids_.swap(new_key_ids);
       key_ids_.swap(old_key_ids_);
     }
   }
-  return true;
 }
 
 template class HashTable<int8_t>;

  Modified: lib/grnxx/map/hash_table.hpp (+2 -2)
===================================================================
--- lib/grnxx/map/hash_table.hpp    2013-07-04 10:38:22 +0900 (ffb2fb8)
+++ lib/grnxx/map/hash_table.hpp    2013-07-04 11:34:33 +0900 (626c48b)
@@ -95,12 +95,12 @@ class HashTable : public Map<T> {
   bool find_key(KeyArg key, int64_t **stored_key_id);
 
   // Rebuild the hash table.
-  bool rebuild();
+  void rebuild();
   // Move to the next entry.
   uint64_t rehash(uint64_t hash) const;
 
   // Refresh "key_ids_" if it is old.
-  bool refresh_key_ids();
+  void refresh_key_ids();
 };
 
 }  // namespace map

  Modified: lib/grnxx/map/hash_table/key_id_array.hpp (+4 -25)
===================================================================
--- lib/grnxx/map/hash_table/key_id_array.hpp    2013-07-04 10:38:22 +0900 (7aafbcd)
+++ lib/grnxx/map/hash_table/key_id_array.hpp    2013-07-04 11:34:33 +0900 (228aad0)
@@ -91,33 +91,20 @@ class KeyIDArray {
   static KeyIDArray *create(Storage *storage, uint32_t storage_node_id,
                             uint64_t mask) {
     std::unique_ptr<KeyIDArray> array(create_instance());
-    if (!array) {
-      return nullptr;
-    }
-    if (!array->create_array(storage, storage_node_id, mask)) {
-      return nullptr;
-    }
+    array->create_array(storage, storage_node_id, mask);
     return array.release();
   }
 
   // Open an array.
   static KeyIDArray *open(Storage *storage, uint32_t storage_node_id) {
     std::unique_ptr<KeyIDArray> array(create_instance());
-    if (!array) {
-      return nullptr;
-    }
-    if (!array->open_array(storage, storage_node_id)) {
-      return nullptr;
-    }
+    array->open_array(storage, storage_node_id);
     return array.release();
   }
 
   // Unlink an array.
   static bool unlink(Storage *storage, uint32_t storage_node_id) {
     std::unique_ptr<KeyIDArray> array(open(storage, storage_node_id));
-    if (!array) {
-      return false;
-    }
     return storage->unlink_node(storage_node_id);
   }
 
@@ -181,14 +168,11 @@ class KeyIDArray {
     return array;
   }
 
-  bool create_array(Storage *storage, uint32_t storage_node_id,
+  void create_array(Storage *storage, uint32_t storage_node_id,
                     uint64_t mask) {
     storage_ = storage;
     StorageNode storage_node =
         storage_->create_node(storage_node_id, sizeof(KeyIDArrayHeader));
-    if (!storage_node) {
-      return false;
-    }
     storage_node_id_ = storage_node.id();
     try {
       header_ = static_cast<KeyIDArrayHeader *>(storage_node.body());
@@ -201,20 +185,15 @@ class KeyIDArray {
       storage_->unlink_node(storage_node_id_);
       throw;
     }
-    return true;
   }
 
-  bool open_array(Storage *storage, uint32_t storage_node_id) {
+  void open_array(Storage *storage, uint32_t storage_node_id) {
     storage_ = storage;
     StorageNode storage_node = storage_->open_node(storage_node_id);
-    if (!storage_node) {
-      return false;
-    }
     storage_node_id_ = storage_node.id();
     header_ = static_cast<KeyIDArrayHeader *>(storage_node.body());
     impl_.open(storage, header_->impl_storage_node_id);
     mask_ = header_->mask;
-    return true;
   }
 };
 

  Modified: lib/grnxx/map/key_store.cpp (+2 -24)
===================================================================
--- lib/grnxx/map/key_store.cpp    2013-07-04 10:38:22 +0900 (a194a79)
+++ lib/grnxx/map/key_store.cpp    2013-07-04 11:34:33 +0900 (0a03291)
@@ -82,10 +82,6 @@ bool KeyStore<T>::unset(int64_t key_id) {
   const uint64_t unit_id = key_id / bits_->unit_size();
   const uint64_t unit_bit = 1ULL << (key_id % bits_->unit_size());
   BitArrayUnit * const unit = bits_->get_unit(unit_id);
-  if (!unit) {
-    // Error.
-    return false;
-  }
   if ((*unit & unit_bit) == 0) {
     // Not found.
     return false;
@@ -94,10 +90,6 @@ bool KeyStore<T>::unset(int64_t key_id) {
   uint64_t *link = nullptr;
   if (*unit == ~BitArrayUnit(0)) {
     link = links_->get_pointer(unit_id);
-    if (!link) {
-      // Error.
-      return false;
-    }
   }
   *unit &= ~unit_bit;
   if (link) {
@@ -119,33 +111,19 @@ bool KeyStore<T>::add(KeyArg key, int64_t *key_id) {
     unit_id = header_->latest_link;
   }
   BitArrayUnit * const unit = bits_->get_unit(unit_id);
-  if (!unit) {
-    // Error.
-    return false;
-  }
   const uint8_t unit_bit_id = bit_scan_forward(~*unit);
   const uint64_t unit_bit = 1ULL << unit_bit_id;
   const int64_t next_key_id = (unit_id * bits_->unit_size()) + unit_bit_id;
   uint64_t *link = nullptr;
   if (is_new_unit) {
-    if (!links_->set(unit_id, INVALID_LINK)) {
-      // Error.
-      return false;
-    }
+    links_->set(unit_id, INVALID_LINK);
     *unit = 0;
     header_->latest_link = (header_->max_key_id + 1) / bits_->unit_size();
   } else if ((*unit | unit_bit) == ~BitArrayUnit(0)) {
     // The unit will be removed from "links_" if it becomes full.
     link = links_->get_pointer(header_->latest_link);
-    if (!link) {
-      // Error.
-      return false;
-    }
-  }
-  if (!keys_->set(next_key_id, key)) {
-    // Error.
-    return false;
   }
+  keys_->set(next_key_id, key);
   if (link) {
     header_->latest_link = *link;
   }

  Modified: lib/grnxx/map/patricia.cpp (+44 -293)
===================================================================
--- lib/grnxx/map/patricia.cpp    2013-07-04 10:38:22 +0900 (aba2098)
+++ lib/grnxx/map/patricia.cpp    2013-07-04 11:34:33 +0900 (9981020)
@@ -61,7 +61,7 @@ Patricia<T> *Patricia<T>::create(Storage *storage,
   std::unique_ptr<Patricia> map(new (std::nothrow) Patricia);
   if (!map) {
     GRNXX_ERROR() << "new grnxx::map::Patricia failed";
-    return nullptr;
+    throw MemoryError();
   }
   map->create_map(storage, storage_node_id, options);
   return map.release();
@@ -73,7 +73,7 @@ Patricia<T> *Patricia<T>::open(Storage *storage,
   std::unique_ptr<Patricia> map(new (std::nothrow) Patricia);
   if (!map) {
     GRNXX_ERROR() << "new grnxx::map::Patricia failed";
-    return nullptr;
+    throw MemoryError();
   }
   map->open_map(storage, storage_node_id);
   return map.release();
@@ -106,18 +106,12 @@ bool Patricia<T>::get(int64_t key_id, Key *key) {
     return false;
   }
   bool bit;
-  if (!keys_->get_bit(key_id, &bit)) {
-    // Error.
-    return false;
-  }
+  keys_->get_bit(key_id, &bit);
   if (!bit) {
     // Not found.
     return false;
   }
-  if (!keys_->get_key(key_id, key)) {
-    // Error.
-    return false;
-  }
+  keys_->get_key(key_id, key);
   return true;
 }
 
@@ -125,7 +119,7 @@ template <typename T>
 bool Patricia<T>::unset(int64_t key_id) {
   Key key;
   if (!get(key_id, &key)) {
-    // Not found or error.
+    // Not found.
     return false;
   }
   // The root node must be a dead node because the above get() has succeeded.
@@ -133,10 +127,6 @@ bool Patricia<T>::unset(int64_t key_id) {
   Node *prev_node = nullptr;
   for ( ; ; ) {
     Node * const node = nodes_->get_pointer(node_id);
-    if (!node) {
-      // Error.
-      return false;
-    }
     if (node->status() == NODE_LEAF) {
       if (node->key_id() != key_id) {
         // Not found.
@@ -161,7 +151,7 @@ bool Patricia<T>::reset(int64_t key_id, KeyArg dest_key) {
   // Find the source key.
   Key src_key;
   if (!get(key_id, &src_key)) {
-    // Not found or error.
+    // Not found.
     return false;
   }
   // The root node must be a dead node because the above get() has succeeded.
@@ -171,10 +161,6 @@ bool Patricia<T>::reset(int64_t key_id, KeyArg dest_key) {
   Node *src_sibling_node = nullptr;
   for ( ; ; ) {
     src_node = nodes_->get_pointer(node_id);
-    if (!src_node) {
-      // Error.
-      return false;
-    }
     if (src_node->status() == NODE_LEAF) {
       if (src_node->key_id() != key_id) {
         // Not found.
@@ -195,10 +181,6 @@ bool Patricia<T>::reset(int64_t key_id, KeyArg dest_key) {
   int depth = -1;
   for ( ; ; ) {
     Node * const node = nodes_->get_pointer(node_id);
-    if (!node) {
-      // Error.
-      return false;
-    }
     history[++depth] = node;
     if (node->status() == NODE_LEAF) {
       break;
@@ -208,10 +190,7 @@ bool Patricia<T>::reset(int64_t key_id, KeyArg dest_key) {
   }
   // Count the number of the common prefix bits.
   Key stored_key;
-  if (!keys_->get_key(history[depth]->key_id(), &stored_key)) {
-    // Error.
-    return false;
-  }
+  keys_->get_key(history[depth]->key_id(), &stored_key);
   const uint64_t count =
       count_common_prefix_bits(dest_normalized_key, stored_key);
   if (count == (sizeof(Key) * 8)) {
@@ -227,13 +206,7 @@ bool Patricia<T>::reset(int64_t key_id, KeyArg dest_key) {
   }
   Node * const dest_prev_node = history[depth];
   Node * const next_nodes = nodes_->get_pointer(header_->next_node_id);
-  if (!next_nodes) {
-    return false;
-  }
-  if (!keys_->reset(key_id, dest_normalized_key)) {
-    // Error.
-    return false;
-  }
+  keys_->reset(key_id, dest_normalized_key);
   Node *dest_node;
   Node *dest_sibling_node;
   if (get_ith_bit(dest_normalized_key, count)) {
@@ -262,10 +235,7 @@ bool Patricia<T>::find(KeyArg key, int64_t *key_id) {
   const Key normalized_key = Helper<T>::normalize(key);
   uint64_t node_id = ROOT_NODE_ID;
   Node node;
-  if (!nodes_->get(node_id, &node)) {
-    // Error.
-    return false;
-  }
+  nodes_->get(node_id, &node);
   if (node.status() == NODE_DEAD) {
     // Not found.
     return false;
@@ -273,10 +243,7 @@ bool Patricia<T>::find(KeyArg key, int64_t *key_id) {
   for ( ; ; ) {
     if (node.status() == NODE_LEAF) {
       Key stored_key;
-      if (!keys_->get_key(node.key_id(), &stored_key)) {
-        // Error.
-        return false;
-      }
+      keys_->get_key(node.key_id(), &stored_key);
       if (!Helper<T>::equal_to(normalized_key, stored_key)) {
         // Not found.
         return false;
@@ -287,10 +254,7 @@ bool Patricia<T>::find(KeyArg key, int64_t *key_id) {
       return true;
     }
     node_id = node.offset() + get_ith_bit(normalized_key, node.bit_pos());
-    if (!nodes_->get(node_id, &node)) {
-      // Error.
-      return false;
-    }
+    nodes_->get(node_id, &node);
   }
 }
 
@@ -299,17 +263,10 @@ bool Patricia<T>::add(KeyArg key, int64_t *key_id) {
   const Key normalized_key = Helper<T>::normalize(key);
   uint64_t node_id = ROOT_NODE_ID;
   Node *node = nodes_->get_pointer(node_id);
-  if (!node) {
-    // Error.
-    return false;
-  }
   if (node->status() == NODE_DEAD) {
     // The patricia is empty.
     int64_t next_key_id;
-    if (!keys_->add(normalized_key, &next_key_id)) {
-      // Error.
-      return false;
-    }
+    keys_->add(normalized_key, &next_key_id);
     *node = Node::leaf_node(next_key_id);
     if (key_id) {
       *key_id = next_key_id;
@@ -322,18 +279,11 @@ bool Patricia<T>::add(KeyArg key, int64_t *key_id) {
   while (node->status() != NODE_LEAF) {
     node_id = node->offset() + get_ith_bit(normalized_key, node->bit_pos());
     node = nodes_->get_pointer(node_id);
-    if (!node) {
-      // Error.
-      return false;
-    }
     history[++depth] = node;
   }
   // Count the number of the common prefix bits.
   Key stored_key;
-  if (!keys_->get_key(node->key_id(), &stored_key)) {
-    // Error.
-    return false;
-  }
+  keys_->get_key(node->key_id(), &stored_key);
   const uint64_t count = count_common_prefix_bits(normalized_key, stored_key);
   if (count == (sizeof(Key) * 8)) {
     // Found.
@@ -351,14 +301,8 @@ bool Patricia<T>::add(KeyArg key, int64_t *key_id) {
   }
   node = history[depth];
   Node * const next_nodes = nodes_->get_pointer(header_->next_node_id);
-  if (!next_nodes) {
-    return false;
-  }
   int64_t next_key_id;
-  if (!keys_->add(normalized_key, &next_key_id)) {
-    // Error.
-    return false;
-  }
+  keys_->add(normalized_key, &next_key_id);
   if (get_ith_bit(normalized_key, count)) {
     next_nodes[0] = *node;
     next_nodes[1] = Node::leaf_node(next_key_id);
@@ -379,10 +323,6 @@ bool Patricia<T>::remove(KeyArg key) {
   const Key normalized_key = Helper<T>::normalize(key);
   uint64_t node_id = ROOT_NODE_ID;
   Node *node = nodes_->get_pointer(node_id);
-  if (!node) {
-    // Error.
-    return false;
-  }
   if (node->status() == NODE_DEAD) {
     // Not found.
     return false;
@@ -391,10 +331,7 @@ bool Patricia<T>::remove(KeyArg key) {
   for ( ; ; ) {
     if (node->status() == NODE_LEAF) {
       Key stored_key;
-      if (!keys_->get_key(node->key_id(), &stored_key)) {
-        // Error.
-        return false;
-      }
+      keys_->get_key(node->key_id(), &stored_key);
       if (!Helper<T>::equal_to(normalized_key, stored_key)) {
         // Not found.
         return false;
@@ -411,10 +348,6 @@ bool Patricia<T>::remove(KeyArg key) {
     prev_node = node;
     node_id = node->offset() + get_ith_bit(normalized_key, node->bit_pos());
     node = nodes_->get_pointer(node_id);
-    if (!node) {
-      // Error.
-      return false;
-    }
   }
 }
 
@@ -423,10 +356,6 @@ bool Patricia<T>::replace(KeyArg src_key, KeyArg dest_key, int64_t *key_id) {
   const Key src_normalized_key = Helper<T>::normalize(src_key);
   uint64_t node_id = ROOT_NODE_ID;
   Node *src_node = nodes_->get_pointer(node_id);
-  if (!src_node) {
-    // Error.
-    return false;
-  }
   if (src_node->status() == NODE_DEAD) {
     // Not found.
     return false;
@@ -438,10 +367,7 @@ bool Patricia<T>::replace(KeyArg src_key, KeyArg dest_key, int64_t *key_id) {
     if (src_node->status() == NODE_LEAF) {
       src_key_id = src_node->key_id();
       Key stored_key;
-      if (!keys_->get_key(src_key_id, &stored_key)) {
-        // Error.
-        return false;
-      }
+      keys_->get_key(src_key_id, &stored_key);
       if (!Helper<T>::equal_to(src_normalized_key, stored_key)) {
         // Not found.
         return false;
@@ -455,10 +381,6 @@ bool Patricia<T>::replace(KeyArg src_key, KeyArg dest_key, int64_t *key_id) {
     node_id = src_node->offset() +
               get_ith_bit(src_normalized_key, src_node->bit_pos());
     src_node = nodes_->get_pointer(node_id);
-    if (!src_node) {
-      // Error.
-      return false;
-    }
   }
   // Add the destination key.
   const Key dest_normalized_key = Helper<T>::normalize(dest_key);
@@ -467,10 +389,6 @@ bool Patricia<T>::replace(KeyArg src_key, KeyArg dest_key, int64_t *key_id) {
   int depth = -1;
   for ( ; ; ) {
     Node * const node = nodes_->get_pointer(node_id);
-    if (!node) {
-      // Error.
-      return false;
-    }
     history[++depth] = node;
     if (node->status() == NODE_LEAF) {
       break;
@@ -480,10 +398,7 @@ bool Patricia<T>::replace(KeyArg src_key, KeyArg dest_key, int64_t *key_id) {
   }
   // Count the number of the common prefix bits.
   Key stored_key;
-  if (!keys_->get_key(history[depth]->key_id(), &stored_key)) {
-    // Error.
-    return false;
-  }
+  keys_->get_key(history[depth]->key_id(), &stored_key);
   const uint64_t count =
       count_common_prefix_bits(dest_normalized_key, stored_key);
   if (count == (sizeof(Key) * 8)) {
@@ -499,13 +414,7 @@ bool Patricia<T>::replace(KeyArg src_key, KeyArg dest_key, int64_t *key_id) {
   }
   Node * const dest_prev_node = history[depth];
   Node * const next_nodes = nodes_->get_pointer(header_->next_node_id);
-  if (!next_nodes) {
-    return false;
-  }
-  if (!keys_->reset(src_key_id, dest_normalized_key)) {
-    // Error.
-    return false;
-  }
+  keys_->reset(src_key_id, dest_normalized_key);
   Node *dest_node;
   Node *dest_sibling_node;
   if (get_ith_bit(dest_normalized_key, count)) {
@@ -560,10 +469,6 @@ void Patricia<T>::create_map(Storage *storage, uint32_t storage_node_id,
     header_->nodes_storage_node_id = nodes_->storage_node_id();
     header_->keys_storage_node_id = keys_->storage_node_id();
     Node * const root_node = nodes_->get_pointer(ROOT_NODE_ID);
-    if (!root_node) {
-      // TODO
-      throw LogicError();
-    }
     *root_node = Node::dead_node();
   } catch (...) {
     storage->unlink_node(storage_node_id_);
@@ -663,7 +568,7 @@ Patricia<Bytes> *Patricia<Bytes>::create(Storage *storage,
   std::unique_ptr<Patricia> map(new (std::nothrow) Patricia);
   if (!map) {
     GRNXX_ERROR() << "new grnxx::map::Patricia failed";
-    return nullptr;
+    throw MemoryError();
   }
   map->create_map(storage, storage_node_id, options);
   return map.release();
@@ -674,7 +579,7 @@ Patricia<Bytes> *Patricia<Bytes>::open(Storage *storage,
   std::unique_ptr<Patricia> map(new (std::nothrow) Patricia);
   if (!map) {
     GRNXX_ERROR() << "new grnxx::map::Patricia failed";
-    return nullptr;
+    throw MemoryError();
   }
   map->open_map(storage, storage_node_id);
   return map.release();
@@ -702,25 +607,19 @@ bool Patricia<Bytes>::get(int64_t key_id, Key *key) {
     return false;
   }
   bool bit;
-  if (!keys_->get_bit(key_id, &bit)) {
-    // Error.
-    return false;
-  }
+  keys_->get_bit(key_id, &bit);
   if (!bit) {
     // Not found.
     return false;
   }
-  if (!keys_->get_key(key_id, key)) {
-    // Error.
-    return false;
-  }
+  keys_->get_key(key_id, key);
   return true;
 }
 
 bool Patricia<Bytes>::unset(int64_t key_id) {
   Key key;
   if (!get(key_id, &key)) {
-    // Not found or error.
+    // Not found.
     return false;
   }
   const uint64_t bit_size = key.size() * 8;
@@ -728,10 +627,6 @@ bool Patricia<Bytes>::unset(int64_t key_id) {
   Node *prev_node = nullptr;
   for ( ; ; ) {
     Node * const node = nodes_->get_pointer(node_id);
-    if (!node) {
-      // Error.
-      return false;
-    }
     switch (node->status()) {
       case NODE_LEAF: {
         if (node->key_id() != key_id) {
@@ -772,7 +667,7 @@ bool Patricia<Bytes>::reset(int64_t key_id, KeyArg dest_key) {
   // Find the source key.
   Key src_key;
   if (!get(key_id, &src_key)) {
-    // Not found or error.
+    // Not found.
     return false;
   }
   const uint64_t src_bit_size = src_key.size() * 8;
@@ -782,10 +677,6 @@ bool Patricia<Bytes>::reset(int64_t key_id, KeyArg dest_key) {
   Node *src_sibling_node = nullptr;
   for ( ; ; ) {
     src_node = nodes_->get_pointer(src_node_id);
-    if (!src_node) {
-      // Error.
-      return false;
-    }
     if (src_node->status() == NODE_LEAF) {
       if (src_node->key_id() != key_id) {
         // Not found.
@@ -820,10 +711,6 @@ bool Patricia<Bytes>::reset(int64_t key_id, KeyArg dest_key) {
   int depth = -1;
   for ( ; ; ) {
     Node *node = nodes_->get_pointer(dest_node_id);
-    if (!node) {
-      // Error.
-      return false;
-    }
     history[++depth % HISTORY_SIZE] = node;
     if (node->status() == NODE_LEAF) {
       break;
@@ -843,17 +730,10 @@ bool Patricia<Bytes>::reset(int64_t key_id, KeyArg dest_key) {
   Node *leaf_node = history[depth % HISTORY_SIZE];
   while (leaf_node->status() != NODE_LEAF) {
     leaf_node = nodes_->get_pointer(leaf_node->offset());
-    if (!leaf_node) {
-      // Error.
-      return false;
-    }
   }
   // Count the number of the common prefix bits.
   Key stored_key;
-  if (!keys_->get_key(leaf_node->key_id(), &stored_key)) {
-    // Error.
-    return false;
-  }
+  keys_->get_key(leaf_node->key_id(), &stored_key);
   const uint64_t min_size = (dest_key.size() < stored_key.size()) ?
                             dest_key.size() : stored_key.size();
   uint64_t count;
@@ -869,13 +749,7 @@ bool Patricia<Bytes>::reset(int64_t key_id, KeyArg dest_key) {
     }
     Node * const dest_prev_node = history[depth % HISTORY_SIZE];
     Node * const next_nodes = nodes_->get_pointer(header_->next_node_id);
-    if (!next_nodes) {
-      return false;
-    }
-    if (!keys_->reset(key_id, dest_key)) {
-      // Error.
-      return false;
-    }
+    keys_->reset(key_id, dest_key);
     Node *dest_node;
     Node *dest_sibling_node;
     if (count == dest_key.size()) {
@@ -923,10 +797,6 @@ bool Patricia<Bytes>::reset(int64_t key_id, KeyArg dest_key) {
     dest_node_id = ROOT_NODE_ID;
     for ( ; ; ) {
       dest_prev_node = nodes_->get_pointer(dest_node_id);
-      if (!dest_prev_node) {
-        // Error.
-        return false;
-      }
       if (dest_prev_node->status() == NODE_LEAF) {
         break;
       } else if (dest_prev_node->status() == NODE_BRANCH) {
@@ -944,13 +814,7 @@ bool Patricia<Bytes>::reset(int64_t key_id, KeyArg dest_key) {
     }
   }
   Node * const next_nodes = nodes_->get_pointer(header_->next_node_id);
-  if (!next_nodes) {
-    return false;
-  }
-  if (!keys_->reset(key_id, dest_key)) {
-    // Error.
-    return false;
-  }
+  keys_->reset(key_id, dest_key);
   Node *dest_node;
   Node *dest_sibling_node;
   if (get_ith_bit(dest_key, count)) {
@@ -978,10 +842,7 @@ bool Patricia<Bytes>::find(KeyArg key, int64_t *key_id) {
   const uint64_t bit_size = key.size() * 8;
   uint64_t node_id = ROOT_NODE_ID;
   Node node;
-  if (!nodes_->get(node_id, &node)) {
-    // Error.
-    return false;
-  }
+  nodes_->get(node_id, &node);
   if (node.status() == NODE_DEAD) {
     // Not found.
     return false;
@@ -990,10 +851,7 @@ bool Patricia<Bytes>::find(KeyArg key, int64_t *key_id) {
     switch (node.status()) {
       case NODE_LEAF: {
         Key stored_key;
-        if (!keys_->get_key(node.key_id(), &stored_key)) {
-          // Error.
-          return false;
-        }
+        keys_->get_key(node.key_id(), &stored_key);
         if (key != stored_key) {
           // Not found.
           return false;
@@ -1020,10 +878,7 @@ bool Patricia<Bytes>::find(KeyArg key, int64_t *key_id) {
         break;
       }
     }
-    if (!nodes_->get(node_id, &node)) {
-      // Error.
-      return false;
-    }
+    nodes_->get(node_id, &node);
   }
 }
 
@@ -1046,17 +901,10 @@ bool Patricia<Bytes>::add(KeyArg key, int64_t *key_id) {
 //  }
   uint64_t node_id = ROOT_NODE_ID;
   Node *node = nodes_->get_pointer(node_id);
-  if (!node) {
-    // Error.
-    return false;
-  }
   if (node->status() == NODE_DEAD) {
     // The patricia is empty.
     int64_t next_key_id;
-    if (!keys_->add(key, &next_key_id)) {
-      // Error.
-      return false;
-    }
+    keys_->add(key, &next_key_id);
     *node = Node::leaf_node(next_key_id);
     if (key_id) {
       *key_id = next_key_id;
@@ -1083,27 +931,16 @@ bool Patricia<Bytes>::add(KeyArg key, int64_t *key_id) {
       node_id = node->offset() + 1;
     }
     node = nodes_->get_pointer(node_id);
-    if (!node) {
-      // Error.
-      return false;
-    }
     history[++depth % HISTORY_SIZE] = node;
   }
   // Find a leaf node.
   while (node->status() != NODE_LEAF) {
     node_id = node->offset();
     node = nodes_->get_pointer(node_id);
-    if (!node) {
-      // Error.
-      return false;
-    }
   }
   // Count the number of the common prefix bits.
   Key stored_key;
-  if (!keys_->get_key(node->key_id(), &stored_key)) {
-    // Error.
-    return false;
-  }
+  keys_->get_key(node->key_id(), &stored_key);
   const uint64_t min_size =
       (key.size() < stored_key.size()) ? key.size() : stored_key.size();
   uint64_t count;
@@ -1125,14 +962,8 @@ bool Patricia<Bytes>::add(KeyArg key, int64_t *key_id) {
     }
     node = history[depth % HISTORY_SIZE];
     Node * const next_nodes = nodes_->get_pointer(header_->next_node_id);
-    if (!next_nodes) {
-      return false;
-    }
     int64_t next_key_id;
-    if (!keys_->add(key, &next_key_id)) {
-      // Error.
-      return false;
-    }
+    keys_->add(key, &next_key_id);
     if (count == key.size()) {
       // "key" is a prefix of "stored_key".
       next_nodes[0] = Node::leaf_node(next_key_id);
@@ -1174,10 +1005,6 @@ bool Patricia<Bytes>::add(KeyArg key, int64_t *key_id) {
     node_id = ROOT_NODE_ID;
     for ( ; ; ) {
       node = nodes_->get_pointer(node_id);
-      if (!node) {
-        // Error.
-        return false;
-      }
       if (node->status() == NODE_LEAF) {
         break;
       } else if (node->status() == NODE_BRANCH) {
@@ -1194,14 +1021,8 @@ bool Patricia<Bytes>::add(KeyArg key, int64_t *key_id) {
     }
   }
   Node * const next_nodes = nodes_->get_pointer(header_->next_node_id);
-  if (!next_nodes) {
-    return false;
-  }
   int64_t next_key_id;
-  if (!keys_->add(key, &next_key_id)) {
-    // Error.
-    return false;
-  }
+  keys_->add(key, &next_key_id);
   if (get_ith_bit(key, count)) {
     next_nodes[0] = *node;
     next_nodes[1] = Node::leaf_node(next_key_id);
@@ -1224,10 +1045,6 @@ bool Patricia<Bytes>::remove(KeyArg key) {
   const uint64_t bit_size = key.size() * 8;
   uint64_t node_id = ROOT_NODE_ID;
   Node *node = nodes_->get_pointer(node_id);
-  if (!node) {
-    // Error.
-    return false;
-  }
   if (node->status() == NODE_DEAD) {
     // Not found.
     return false;
@@ -1237,10 +1054,7 @@ bool Patricia<Bytes>::remove(KeyArg key) {
     switch (node->status()) {
       case NODE_LEAF: {
         Key stored_key;
-        if (!keys_->get_key(node->key_id(), &stored_key)) {
-          // Error.
-          return false;
-        }
+        keys_->get_key(node->key_id(), &stored_key);
         if (stored_key != key) {
           // Not found.
           return false;
@@ -1273,10 +1087,6 @@ bool Patricia<Bytes>::remove(KeyArg key) {
     }
     prev_node = node;
     node = nodes_->get_pointer(node_id);
-    if (!node) {
-      // Error.
-      return false;
-    }
   }
 }
 
@@ -1287,10 +1097,6 @@ bool Patricia<Bytes>::replace(KeyArg src_key, KeyArg dest_key,
   int64_t src_key_id;
   uint64_t src_node_id = ROOT_NODE_ID;
   Node *src_node = nodes_->get_pointer(src_node_id);
-  if (!src_node) {
-    // Error.
-    return false;
-  }
   if (src_node->status() == NODE_DEAD) {
     // Not found.
     return false;
@@ -1301,10 +1107,7 @@ bool Patricia<Bytes>::replace(KeyArg src_key, KeyArg dest_key,
     if (src_node->status() == NODE_LEAF) {
       src_key_id = src_node->key_id();
       Key stored_key;
-      if (!keys_->get_key(src_key_id, &stored_key)) {
-        // Error.
-        return false;
-      }
+      keys_->get_key(src_key_id, &stored_key);
       if (stored_key != src_key) {
         // Not found.
         return false;
@@ -1333,10 +1136,6 @@ bool Patricia<Bytes>::replace(KeyArg src_key, KeyArg dest_key,
     }
     src_prev_node = src_node;
     src_node = nodes_->get_pointer(src_node_id);
-    if (!src_node) {
-      // Error.
-      return false;
-    }
   }
   // Add the destination key.
   constexpr std::size_t HISTORY_SIZE = 8;
@@ -1346,10 +1145,6 @@ bool Patricia<Bytes>::replace(KeyArg src_key, KeyArg dest_key,
   int depth = -1;
   for ( ; ; ) {
     Node *node = nodes_->get_pointer(dest_node_id);
-    if (!node) {
-      // Error.
-      return false;
-    }
     history[++depth % HISTORY_SIZE] = node;
     if (node->status() == NODE_LEAF) {
       break;
@@ -1369,17 +1164,10 @@ bool Patricia<Bytes>::replace(KeyArg src_key, KeyArg dest_key,
   Node *leaf_node = history[depth % HISTORY_SIZE];
   while (leaf_node->status() != NODE_LEAF) {
     leaf_node = nodes_->get_pointer(leaf_node->offset());
-    if (!leaf_node) {
-      // Error.
-      return false;
-    }
   }
   // Count the number of the common prefix bits.
   Key stored_key;
-  if (!keys_->get_key(leaf_node->key_id(), &stored_key)) {
-    // Error.
-    return false;
-  }
+  keys_->get_key(leaf_node->key_id(), &stored_key);
   const uint64_t min_size = (dest_key.size() < stored_key.size()) ?
                             dest_key.size() : stored_key.size();
   uint64_t count;
@@ -1395,13 +1183,7 @@ bool Patricia<Bytes>::replace(KeyArg src_key, KeyArg dest_key,
     }
     Node * const dest_prev_node = history[depth % HISTORY_SIZE];
     Node * const next_nodes = nodes_->get_pointer(header_->next_node_id);
-    if (!next_nodes) {
-      return false;
-    }
-    if (!keys_->reset(src_key_id, dest_key)) {
-      // Error.
-      return false;
-    }
+    keys_->reset(src_key_id, dest_key);
     Node *dest_node;
     Node *dest_sibling_node;
     if (count == dest_key.size()) {
@@ -1449,10 +1231,6 @@ bool Patricia<Bytes>::replace(KeyArg src_key, KeyArg dest_key,
     dest_node_id = ROOT_NODE_ID;
     for ( ; ; ) {
       dest_prev_node = nodes_->get_pointer(dest_node_id);
-      if (!dest_prev_node) {
-        // Error.
-        return false;
-      }
       if (dest_prev_node->status() == NODE_LEAF) {
         break;
       } else if (dest_prev_node->status() == NODE_BRANCH) {
@@ -1470,13 +1248,7 @@ bool Patricia<Bytes>::replace(KeyArg src_key, KeyArg dest_key,
     }
   }
   Node * const next_nodes = nodes_->get_pointer(header_->next_node_id);
-  if (!next_nodes) {
-    return false;
-  }
-  if (!keys_->reset(src_key_id, dest_key)) {
-    // Error.
-    return false;
-  }
+  keys_->reset(src_key_id, dest_key);
   Node *dest_node;
   Node *dest_sibling_node;
   if (get_ith_bit(dest_key, count)) {
@@ -1507,10 +1279,7 @@ bool Patricia<Bytes>::find_longest_prefix_match(KeyArg query, int64_t *key_id,
   uint64_t node_id = ROOT_NODE_ID;
   for ( ; ; ) {
     Node node;
-    if (!nodes_->get(node_id, &node)) {
-      // Error.
-      return false;
-    }
+    nodes_->get(node_id, &node);
     switch (node.status()) {
       case NODE_DEAD: {
         // Not found.
@@ -1518,10 +1287,7 @@ bool Patricia<Bytes>::find_longest_prefix_match(KeyArg query, int64_t *key_id,
       }
       case NODE_LEAF: {
         Key stored_key;
-        if (!keys_->get_key(node.key_id(), &stored_key)) {
-          // Error.
-          return false;
-        }
+        keys_->get_key(node.key_id(), &stored_key);
         if (query.starts_with(stored_key)) {
           if (key_id) {
             *key_id = node.key_id();
@@ -1545,15 +1311,9 @@ bool Patricia<Bytes>::find_longest_prefix_match(KeyArg query, int64_t *key_id,
           return found;
         } else if (node.bit_size() < bit_size) {
           Node leaf_node;
-          if (!nodes_->get(node.offset(), &leaf_node)) {
-            // Error.
-            return false;
-          }
+          nodes_->get(node.offset(), &leaf_node);
           Key stored_key;
-          if (!keys_->get_key(leaf_node.key_id(), &stored_key)) {
-            // Error.
-            return false;
-          }
+          keys_->get_key(leaf_node.key_id(), &stored_key);
           if (query.starts_with(stored_key)) {
             if (key_id) {
               *key_id = leaf_node.key_id();
@@ -1573,12 +1333,7 @@ bool Patricia<Bytes>::find_longest_prefix_match(KeyArg query, int64_t *key_id,
 
 bool Patricia<Bytes>::truncate() {
   Node * const root_node = nodes_->get_pointer(ROOT_NODE_ID);
-  if (!root_node) {
-    return false;
-  }
-  if (!keys_->truncate()) {
-    return false;
-  }
+  keys_->truncate();
   *root_node = Node::dead_node();
   return true;
 }
@@ -1599,10 +1354,6 @@ void Patricia<Bytes>::create_map(Storage *storage, uint32_t storage_node_id,
     header_->keys_storage_node_id = keys_->storage_node_id();
     header_->cache_storage_node_id = cache_->storage_node_id();
     Node * const root_node = nodes_->get_pointer(ROOT_NODE_ID);
-    if (!root_node) {
-      // TODO
-      throw LogicError();
-    }
     *root_node = Node::dead_node();
   } catch (...) {
     storage->unlink_node(storage_node_id_);

  Modified: test/test_map.cpp (+0 -83)
===================================================================
--- test/test_map.cpp    2013-07-04 10:38:22 +0900 (e235638)
+++ test/test_map.cpp    2013-07-04 11:34:33 +0900 (9d2b602)
@@ -146,7 +146,6 @@ void test_bytes_store_create() {
   std::unique_ptr<grnxx::map::BytesStore> store(
       grnxx::map::BytesStore::create(storage.get(),
                                      grnxx::STORAGE_ROOT_NODE_ID));
-  assert(store);
 }
 
 void test_bytes_store_open() {
@@ -154,10 +153,8 @@ void test_bytes_store_open() {
   std::unique_ptr<grnxx::map::BytesStore> store(
       grnxx::map::BytesStore::create(storage.get(),
                                      grnxx::STORAGE_ROOT_NODE_ID));
-  assert(store);
   const std::uint32_t storage_node_id = store->storage_node_id();
   store.reset(grnxx::map::BytesStore::open(storage.get(), storage_node_id));
-  assert(store);
 }
 
 void test_bytes_store_unlink() {
@@ -165,10 +162,8 @@ void test_bytes_store_unlink() {
   std::unique_ptr<grnxx::map::BytesStore> store(
       grnxx::map::BytesStore::create(storage.get(),
                                      grnxx::STORAGE_ROOT_NODE_ID));
-  assert(store);
   grnxx::StorageNode storage_node =
       storage->open_node(store->storage_node_id());
-  assert(storage_node);
   assert(grnxx::map::BytesStore::unlink(storage.get(), storage_node.id()));
   assert(storage_node.status() == grnxx::STORAGE_NODE_UNLINKED);
 }
@@ -178,10 +173,8 @@ void test_bytes_store_storage_node_id() {
   std::unique_ptr<grnxx::map::BytesStore> store(
       grnxx::map::BytesStore::create(storage.get(),
                                      grnxx::STORAGE_ROOT_NODE_ID));
-  assert(store);
   grnxx::StorageNode storage_node =
       storage->open_node(store->storage_node_id());
-  assert(storage_node);
   assert(storage_node.status() == grnxx::STORAGE_NODE_ACTIVE);
 }
 
@@ -190,7 +183,6 @@ void test_bytes_store_get() {
   std::unique_ptr<grnxx::map::BytesStore> store(
       grnxx::map::BytesStore::create(storage.get(),
                                      grnxx::STORAGE_ROOT_NODE_ID));
-  assert(store);
   std::vector<grnxx::Bytes> keys;
   std::vector<std::uint64_t> key_ids;
   generate_random_keys(BYTES_STORE_NUM_KEYS, &keys);
@@ -215,7 +207,6 @@ void test_bytes_store_unset() {
   std::unique_ptr<grnxx::map::BytesStore> store(
       grnxx::map::BytesStore::create(storage.get(),
                                      grnxx::STORAGE_ROOT_NODE_ID));
-  assert(store);
   std::vector<grnxx::Bytes> keys;
   std::vector<std::uint64_t> key_ids;
   generate_random_keys(BYTES_STORE_NUM_KEYS, &keys);
@@ -240,7 +231,6 @@ void test_bytes_store_add() {
   std::unique_ptr<grnxx::map::BytesStore> store(
       grnxx::map::BytesStore::create(storage.get(),
                                      grnxx::STORAGE_ROOT_NODE_ID));
-  assert(store);
   std::vector<grnxx::Bytes> keys;
   generate_random_keys(BYTES_STORE_NUM_KEYS, &keys);
 
@@ -255,7 +245,6 @@ void test_bytes_store_sweep() {
   std::unique_ptr<grnxx::map::BytesStore> store(
       grnxx::map::BytesStore::create(storage.get(),
                                      grnxx::STORAGE_ROOT_NODE_ID));
-  assert(store);
   std::vector<grnxx::Bytes> keys;
   std::vector<std::uint64_t> key_ids;
   generate_random_keys(BYTES_STORE_NUM_KEYS, &keys);
@@ -282,7 +271,6 @@ void test_bytes_array_create() {
   std::unique_ptr<grnxx::map::BytesArray> array(
       grnxx::map::BytesArray::create(storage.get(),
                                      grnxx::STORAGE_ROOT_NODE_ID));
-  assert(array);
 }
 
 void test_bytes_array_create_with_default_value() {
@@ -291,7 +279,6 @@ void test_bytes_array_create_with_default_value() {
       grnxx::map::BytesArray::create(storage.get(),
                                      grnxx::STORAGE_ROOT_NODE_ID,
                                      "Default"));
-  assert(array);
 }
 
 void test_bytes_array_open() {
@@ -299,10 +286,8 @@ void test_bytes_array_open() {
   std::unique_ptr<grnxx::map::BytesArray> array(
       grnxx::map::BytesArray::create(storage.get(),
                                      grnxx::STORAGE_ROOT_NODE_ID));
-  assert(array);
   const std::uint32_t storage_node_id = array->storage_node_id();
   array.reset(grnxx::map::BytesArray::open(storage.get(), storage_node_id));
-  assert(array);
 }
 
 void test_bytes_array_unlink() {
@@ -310,10 +295,8 @@ void test_bytes_array_unlink() {
   std::unique_ptr<grnxx::map::BytesArray> array(
       grnxx::map::BytesArray::create(storage.get(),
                                      grnxx::STORAGE_ROOT_NODE_ID));
-  assert(array);
   grnxx::StorageNode storage_node =
       storage->open_node(array->storage_node_id());
-  assert(storage_node);
   assert(grnxx::map::BytesArray::unlink(storage.get(), storage_node.id()));
   assert(storage_node.status() == grnxx::STORAGE_NODE_UNLINKED);
 }
@@ -323,10 +306,8 @@ void test_bytes_array_storage_node_id() {
   std::unique_ptr<grnxx::map::BytesArray> array(
       grnxx::map::BytesArray::create(storage.get(),
                                      grnxx::STORAGE_ROOT_NODE_ID));
-  assert(array);
   grnxx::StorageNode storage_node =
       storage->open_node(array->storage_node_id());
-  assert(storage_node);
   assert(storage_node.status() == grnxx::STORAGE_NODE_ACTIVE);
 }
 
@@ -335,7 +316,6 @@ void test_bytes_array_get() {
   std::unique_ptr<grnxx::map::BytesArray> array(
       grnxx::map::BytesArray::create(storage.get(),
                                      grnxx::STORAGE_ROOT_NODE_ID));
-  assert(array);
   std::vector<grnxx::Bytes> keys;
   generate_random_keys(MAP_NUM_KEYS, &keys);
   for (std::uint64_t i = 0; i < MAP_NUM_KEYS; ++i) {
@@ -353,7 +333,6 @@ void test_bytes_array_set() {
   std::unique_ptr<grnxx::map::BytesArray> array(
       grnxx::map::BytesArray::create(storage.get(),
                                      grnxx::STORAGE_ROOT_NODE_ID));
-  assert(array);
   std::vector<grnxx::Bytes> keys;
   generate_random_keys(MAP_NUM_KEYS, &keys);
   for (std::uint64_t i = 0; i < MAP_NUM_KEYS; ++i) {
@@ -367,7 +346,6 @@ void test_map_create(grnxx::MapType map_type) {
   std::unique_ptr<grnxx::Map<T>> map(
       grnxx::Map<T>::create(storage.get(), grnxx::STORAGE_ROOT_NODE_ID,
                             map_type));
-  assert(map);
 }
 
 template <typename T>
@@ -376,10 +354,8 @@ void test_map_open(grnxx::MapType map_type) {
   std::unique_ptr<grnxx::Map<T>> map(
       grnxx::Map<T>::create(storage.get(), grnxx::STORAGE_ROOT_NODE_ID,
                             map_type));
-  assert(map);
   const std::uint32_t storage_node_id = map->storage_node_id();
   map.reset(grnxx::Map<T>::open(storage.get(), storage_node_id));
-  assert(map);
 }
 
 template <typename T>
@@ -388,9 +364,7 @@ void test_map_unlink(grnxx::MapType map_type) {
   std::unique_ptr<grnxx::Map<T>> map(
       grnxx::Map<T>::create(storage.get(), grnxx::STORAGE_ROOT_NODE_ID,
                             map_type));
-  assert(map);
   grnxx::StorageNode storage_node = storage->open_node(map->storage_node_id());
-  assert(storage_node);
   assert(grnxx::Map<T>::unlink(storage.get(), storage_node.id()));
   assert(storage_node.status() == grnxx::STORAGE_NODE_UNLINKED);
 }
@@ -401,7 +375,6 @@ void test_map_type(grnxx::MapType map_type) {
   std::unique_ptr<grnxx::Map<T>> map(
       grnxx::Map<T>::create(storage.get(), grnxx::STORAGE_ROOT_NODE_ID,
                             map_type));
-  assert(map);
   assert(map->type() == map_type);
 }
 
@@ -411,9 +384,7 @@ void test_map_storage_node_id(grnxx::MapType map_type) {
   std::unique_ptr<grnxx::Map<T>> map(
       grnxx::Map<T>::create(storage.get(), grnxx::STORAGE_ROOT_NODE_ID,
                             map_type));
-  assert(map);
   grnxx::StorageNode storage_node = storage->open_node(map->storage_node_id());
-  assert(storage_node);
   assert(storage_node.status() == grnxx::STORAGE_NODE_ACTIVE);
 }
 
@@ -423,7 +394,6 @@ void test_map_min_key_id(grnxx::MapType map_type) {
   std::unique_ptr<grnxx::Map<T>> map(
       grnxx::Map<T>::create(storage.get(), grnxx::STORAGE_ROOT_NODE_ID,
                             map_type));
-  assert(map);
   assert(map->min_key_id() == grnxx::MAP_MIN_KEY_ID);
   assert(map->add(generate_random_key<T>()));
   assert(map->min_key_id() == grnxx::MAP_MIN_KEY_ID);
@@ -437,7 +407,6 @@ void test_map_max_key_id(grnxx::MapType map_type) {
   std::unique_ptr<grnxx::Map<T>> map(
       grnxx::Map<T>::create(storage.get(), grnxx::STORAGE_ROOT_NODE_ID,
                             map_type));
-  assert(map);
   assert(map->max_key_id() == (grnxx::MAP_MIN_KEY_ID - 1));
   assert(map->add(generate_random_key<T>()));
   assert(map->max_key_id() == grnxx::MAP_MIN_KEY_ID);
@@ -451,7 +420,6 @@ void test_map_num_keys(grnxx::MapType map_type) {
   std::unique_ptr<grnxx::Map<T>> map(
       grnxx::Map<T>::create(storage.get(), grnxx::STORAGE_ROOT_NODE_ID,
                             map_type));
-  assert(map);
   assert(map->num_keys() == 0);
   assert(map->add(generate_random_key<T>()));
   assert(map->num_keys() == 1);
@@ -465,7 +433,6 @@ void test_map_get(grnxx::MapType map_type) {
   std::unique_ptr<grnxx::Map<T>> map(
       grnxx::Map<T>::create(storage.get(), grnxx::STORAGE_ROOT_NODE_ID,
                             map_type));
-  assert(map);
   std::vector<T> keys;
   generate_random_keys(MAP_NUM_KEYS, &keys);
 
@@ -487,7 +454,6 @@ void test_map_get_next(grnxx::MapType map_type) {
   std::unique_ptr<grnxx::Map<T>> map(
       grnxx::Map<T>::create(storage.get(), grnxx::STORAGE_ROOT_NODE_ID,
                             map_type));
-  assert(map);
   std::int64_t key_id;
   std::vector<T> keys;
   generate_random_keys(MAP_NUM_KEYS, &keys);
@@ -524,7 +490,6 @@ void test_map_unset(grnxx::MapType map_type) {
   std::unique_ptr<grnxx::Map<T>> map(
       grnxx::Map<T>::create(storage.get(), grnxx::STORAGE_ROOT_NODE_ID,
                             map_type));
-  assert(map);
   std::vector<T> keys;
   generate_random_keys(MAP_NUM_KEYS, &keys);
 
@@ -545,7 +510,6 @@ void test_map_reset(grnxx::MapType map_type) {
   std::unique_ptr<grnxx::Map<T>> map(
       grnxx::Map<T>::create(storage.get(), grnxx::STORAGE_ROOT_NODE_ID,
                             map_type));
-  assert(map);
   std::vector<T> keys;
   generate_random_keys(MAP_NUM_KEYS, &keys);
 
@@ -570,7 +534,6 @@ void test_map_find(grnxx::MapType map_type) {
   std::unique_ptr<grnxx::Map<T>> map(
       grnxx::Map<T>::create(storage.get(), grnxx::STORAGE_ROOT_NODE_ID,
                             map_type));
-  assert(map);
   std::vector<T> keys;
   generate_random_keys(MAP_NUM_KEYS, &keys);
 
@@ -591,7 +554,6 @@ void test_map_add(grnxx::MapType map_type) {
   std::unique_ptr<grnxx::Map<T>> map(
       grnxx::Map<T>::create(storage.get(), grnxx::STORAGE_ROOT_NODE_ID,
                             map_type));
-  assert(map);
   std::vector<T> keys;
   generate_random_keys(MAP_NUM_KEYS, &keys);
 
@@ -609,7 +571,6 @@ void test_map_remove(grnxx::MapType map_type) {
   std::unique_ptr<grnxx::Map<T>> map(
       grnxx::Map<T>::create(storage.get(), grnxx::STORAGE_ROOT_NODE_ID,
                             map_type));
-  assert(map);
   std::vector<T> keys;
   generate_random_keys(MAP_NUM_KEYS, &keys);
 
@@ -630,7 +591,6 @@ void test_map_replace(grnxx::MapType map_type) {
   std::unique_ptr<grnxx::Map<T>> map(
       grnxx::Map<T>::create(storage.get(), grnxx::STORAGE_ROOT_NODE_ID,
                             map_type));
-  assert(map);
   std::vector<T> keys;
   generate_random_keys(MAP_NUM_KEYS, &keys);
 
@@ -662,7 +622,6 @@ void test_map_find_longest_prefix_match<grnxx::Bytes>(grnxx::MapType map_type) {
       grnxx::Map<grnxx::Bytes>::create(storage.get(),
                                        grnxx::STORAGE_ROOT_NODE_ID,
                                        map_type));
-  assert(map);
   std::vector<grnxx::Bytes> keys;
   generate_random_keys(MAP_NUM_KEYS, &keys);
 
@@ -684,7 +643,6 @@ void test_map_truncate(grnxx::MapType map_type) {
   std::unique_ptr<grnxx::Map<T>> map(
       grnxx::Map<T>::create(storage.get(), grnxx::STORAGE_ROOT_NODE_ID,
                             map_type));
-  assert(map);
   std::vector<T> keys;
   generate_random_keys(MAP_NUM_KEYS, &keys);
 
@@ -709,7 +667,6 @@ void test_map_all_keys(grnxx::MapType map_type) {
   std::unique_ptr<grnxx::Map<T>> map(
       grnxx::Map<T>::create(storage.get(), grnxx::STORAGE_ROOT_NODE_ID,
                             map_type));
-  assert(map);
 
   map->all_keys();
 }
@@ -720,7 +677,6 @@ void test_map_key_id(grnxx::MapType map_type) {
   std::unique_ptr<grnxx::Map<T>> map(
       grnxx::Map<T>::create(storage.get(), grnxx::STORAGE_ROOT_NODE_ID,
                             map_type));
-  assert(map);
   constexpr std::int64_t min = 10;
   constexpr std::int64_t max = 100;
 
@@ -751,7 +707,6 @@ void test_map_key(grnxx::MapType map_type) {
   std::unique_ptr<grnxx::Map<T>> map(
       grnxx::Map<T>::create(storage.get(), grnxx::STORAGE_ROOT_NODE_ID,
                             map_type));
-  assert(map);
   const T min = generate_random_key<T>();
   const T max = generate_random_key<T>();
 
@@ -782,11 +737,9 @@ void test_map_create_all_keys_cursor(grnxx::MapType map_type) {
   std::unique_ptr<grnxx::Map<T>> map(
       grnxx::Map<T>::create(storage.get(), grnxx::STORAGE_ROOT_NODE_ID,
                             map_type));
-  assert(map);
   std::unique_ptr<grnxx::MapCursor<T>> cursor;
 
   cursor.reset(map->create_cursor(map->all_keys()));
-  assert(cursor);
 }
 
 template <typename T>
@@ -795,54 +748,37 @@ void test_map_create_key_id_range_cursor(grnxx::MapType map_type) {
   std::unique_ptr<grnxx::Map<T>> map(
       grnxx::Map<T>::create(storage.get(), grnxx::STORAGE_ROOT_NODE_ID,
                             map_type));
-  assert(map);
   constexpr std::int64_t min = 10;
   constexpr std::int64_t max = 100;
   std::unique_ptr<grnxx::MapCursor<T>> cursor;
 
   cursor.reset(map->create_cursor(map->key_id() > min));
-  assert(cursor);
   cursor.reset(map->create_cursor(map->key_id() >= min));
-  assert(cursor);
   cursor.reset(map->create_cursor(map->key_id() < max));
-  assert(cursor);
   cursor.reset(map->create_cursor(map->key_id() <= max));
-  assert(cursor);
 
   cursor.reset(map->create_cursor(min < map->key_id()));
-  assert(cursor);
   cursor.reset(map->create_cursor(min <= map->key_id()));
-  assert(cursor);
   cursor.reset(map->create_cursor(max > map->key_id()));
-  assert(cursor);
   cursor.reset(map->create_cursor(max >= map->key_id()));
-  assert(cursor);
 
   cursor.reset(map->create_cursor(
       (map->key_id() > min) && (map->key_id() < max)));
-  assert(cursor);
   cursor.reset(map->create_cursor(
       (map->key_id() > min) && (map->key_id() <= max)));
-  assert(cursor);
   cursor.reset(map->create_cursor(
       (map->key_id() >= min) && (map->key_id() < max)));
-  assert(cursor);
   cursor.reset(map->create_cursor(
       (map->key_id() >= min) && (map->key_id() <= max)));
-  assert(cursor);
 
   cursor.reset(map->create_cursor(
       (map->key_id() < max) && (map->key_id() > min)));
-  assert(cursor);
   cursor.reset(map->create_cursor(
       (map->key_id() <= max) && (map->key_id() > min)));
-  assert(cursor);
   cursor.reset(map->create_cursor(
       (map->key_id() < max) && (map->key_id() >= min)));
-  assert(cursor);
   cursor.reset(map->create_cursor(
       (map->key_id() <= max) && (map->key_id() >= min)));
-  assert(cursor);
 }
 
 template <typename T>
@@ -851,54 +787,37 @@ void test_map_create_key_range_cursor(grnxx::MapType map_type) {
   std::unique_ptr<grnxx::Map<T>> map(
       grnxx::Map<T>::create(storage.get(), grnxx::STORAGE_ROOT_NODE_ID,
                             map_type));
-  assert(map);
   const T min = generate_random_key<T>();
   const T max = generate_random_key<T>();
   std::unique_ptr<grnxx::MapCursor<T>> cursor;
 
   cursor.reset(map->create_cursor(map->key() > min));
-  assert(cursor);
   cursor.reset(map->create_cursor(map->key() >= min));
-  assert(cursor);
   cursor.reset(map->create_cursor(map->key() < max));
-  assert(cursor);
   cursor.reset(map->create_cursor(map->key() <= max));
-  assert(cursor);
 
   cursor.reset(map->create_cursor(min < map->key()));
-  assert(cursor);
   cursor.reset(map->create_cursor(min <= map->key()));
-  assert(cursor);
   cursor.reset(map->create_cursor(max > map->key()));
-  assert(cursor);
   cursor.reset(map->create_cursor(max >= map->key()));
-  assert(cursor);
 
   cursor.reset(map->create_cursor(
       (map->key() > min) && (map->key() < max)));
-  assert(cursor);
   cursor.reset(map->create_cursor(
       (map->key() > min) && (map->key() <= max)));
-  assert(cursor);
   cursor.reset(map->create_cursor(
       (map->key() >= min) && (map->key() < max)));
-  assert(cursor);
   cursor.reset(map->create_cursor(
       (map->key() >= min) && (map->key() <= max)));
-  assert(cursor);
 
   cursor.reset(map->create_cursor(
       (map->key() < max) && (map->key() > min)));
-  assert(cursor);
   cursor.reset(map->create_cursor(
       (map->key() <= max) && (map->key() > min)));
-  assert(cursor);
   cursor.reset(map->create_cursor(
       (map->key() < max) && (map->key() >= min)));
-  assert(cursor);
   cursor.reset(map->create_cursor(
       (map->key() <= max) && (map->key() >= min)));
-  assert(cursor);
 }
 
 template <>
@@ -918,12 +837,10 @@ void test_map_create_scanner<grnxx::Bytes>(grnxx::MapType map_type) {
       grnxx::Map<grnxx::Bytes>::create(storage.get(),
                                        grnxx::STORAGE_ROOT_NODE_ID,
                                        map_type));
-  assert(map);
   const grnxx::Bytes text = generate_random_text<grnxx::Bytes>();
   std::unique_ptr<grnxx::MapScanner<grnxx::Bytes>> scanner;
 
   scanner.reset(map->create_scanner(text));
-  assert(scanner);
 }
 
 template <typename T>




More information about the Groonga-commit mailing list
Back to archive index