[Groonga-commit] groonga/grnxx at 085be63 [master] Update Table to use Array.

Back to archive index

susumu.yata null+****@clear*****
Fri Jul 25 17:56:27 JST 2014


susumu.yata	2014-07-25 17:56:27 +0900 (Fri, 25 Jul 2014)

  New Revision: 085be6337bfaf3e677bf82b8b5d6b08a46f2ce06
  https://github.com/groonga/grnxx/commit/085be6337bfaf3e677bf82b8b5d6b08a46f2ce06

  Message:
    Update Table to use Array.

  Modified files:
    include/grnxx/table.hpp
    lib/grnxx/table.cpp

  Modified: include/grnxx/table.hpp (+4 -5)
===================================================================
--- include/grnxx/table.hpp    2014-07-25 17:54:15 +0900 (fb82446)
+++ include/grnxx/table.hpp    2014-07-25 17:56:27 +0900 (737d3fe)
@@ -1,8 +1,7 @@
 #ifndef GRNXX_TABLE_HPP
 #define GRNXX_TABLE_HPP
 
-#include <vector>
-
+#include "grnxx/array.hpp"
 #include "grnxx/name.hpp"
 #include "grnxx/types.hpp"
 
@@ -202,12 +201,12 @@ class Table {
  private:
   DB *db_;
   Name name_;
-  std::vector<unique_ptr<Column>> columns_;
+  Array<unique_ptr<Column>> columns_;
   Column *key_column_;
   Int num_rows_;
   Int max_row_id_;
-  std::vector<uint64_t> bitmap_;
-  std::vector<std::vector<uint64_t>> bitmap_indexes_;
+  Array<uint64_t> bitmap_;
+  Array<Array<uint64_t>> bitmap_indexes_;
 
   // Create a new table.
   //

  Modified: lib/grnxx/table.cpp (+15 -18)
===================================================================
--- lib/grnxx/table.cpp    2014-07-25 17:54:15 +0900 (80390de)
+++ lib/grnxx/table.cpp    2014-07-25 17:56:27 +0900 (f6206fc)
@@ -242,10 +242,7 @@ Column *Table::create_column(Error *error,
                     static_cast<int>(name.size()), name.data());
     return nullptr;
   }
-  try {
-    columns_.reserve(columns_.size() + 1);
-  } catch (...) {
-    GRNXX_ERROR_SET(error, NO_MEMORY, "Memory allocation failed");
+  if (!columns_.reserve(error, columns_.size() + 1)) {
     return nullptr;
   }
   unique_ptr<Column> new_column =
@@ -253,7 +250,7 @@ Column *Table::create_column(Error *error,
   if (!new_column) {
     return nullptr;
   }
-  columns_.push_back(std::move(new_column));
+  columns_.push_back(error, std::move(new_column));
   return columns_.back().get();
 }
 
@@ -268,7 +265,7 @@ bool Table::remove_column(Error *error, String name) {
                     static_cast<int>(name.size()), name.data());
     return false;
   }
-  columns_.erase(columns_.begin() + column_id);
+  columns_.erase(column_id);
   return true;
 }
 
@@ -504,10 +501,10 @@ Table::Table()
 void Table::set_bit(Int i) {
   bitmap_[i / 64] |= uint64_t(1) << (i % 64);
   if (bitmap_[i / 64] == ~uint64_t(0)) {
-    for (auto &bitmap_index : bitmap_indexes_) {
+    for (Int index_id = 0; index_id < bitmap_indexes_.size(); ++index_id) {
       i /= 64;
-      bitmap_index[i / 64] |= uint64_t(1) << (i % 64);
-      if (bitmap_index[i / 64] != ~uint64_t(0)) {
+      bitmap_indexes_[index_id][i / 64] |= uint64_t(1) << (i % 64);
+      if (bitmap_indexes_[index_id][i / 64] != ~uint64_t(0)) {
         break;
       }
     }
@@ -518,10 +515,10 @@ void Table::unset_bit(Int i) {
   bool is_full = bitmap_[i / 64] == ~uint64_t(0);
   bitmap_[i / 64] &= ~(uint64_t(1) << (i % 64));
   if (is_full) {
-    for (auto &bitmap_index : bitmap_indexes_) {
+    for (Int index_id = 0; index_id < bitmap_indexes_.size(); ++index_id) {
       i /= 64;
-      is_full = bitmap_index[i / 64] == ~uint64_t(0);
-      bitmap_index[i / 64] &= ~(uint64_t(1) << (i % 64));
+      is_full = bitmap_indexes_[index_id][i / 64] == ~uint64_t(0);
+      bitmap_indexes_[index_id][i / 64] &= ~(uint64_t(1) << (i % 64));
       if (!is_full) {
         break;
       }
@@ -549,12 +546,12 @@ bool Table::reserve_bit(Error *error, Int i) {
   // TODO: Error handling.
   size_t block_id = i / 64;
   if (block_id >= bitmap_.size()) {
-    bitmap_.resize(block_id + 1, 0);
+    bitmap_.resize(error, block_id + 1, 0);
   }
-  for (auto &bitmap_index : bitmap_indexes_) {
+  for (Int index_id = 0; index_id < bitmap_indexes_.size(); ++index_id) {
     block_id /= 64;
-    if (block_id >= bitmap_index.size()) {
-      bitmap_index.resize(block_id + 1, 0);
+    if (block_id >= bitmap_indexes_[index_id].size()) {
+      bitmap_indexes_[index_id].resize(error, block_id + 1, 0);
     } else {
       block_id = 0;
       break;
@@ -563,8 +560,8 @@ bool Table::reserve_bit(Error *error, Int i) {
   Int depth = bitmap_indexes_.size();
   while (block_id > 0) {
     block_id /= 64;
-    bitmap_indexes_.resize(depth + 1);
-    bitmap_indexes_[depth].resize(block_id + 1, 0);
+    bitmap_indexes_.resize(error, depth + 1);
+    bitmap_indexes_[depth].resize(error, block_id + 1, 0);
     if (depth == 0) {
       bitmap_indexes_[depth][0] = bitmap_[0] != 0;
     } else {
-------------- next part --------------
HTML����������������������������...
下載 



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