[Groonga-commit] groonga/grnxx at d93b6f5 [master] Simplify Array for trivial types.

Back to archive index

susumu.yata null+****@clear*****
Mon Dec 1 17:44:02 JST 2014


susumu.yata	2014-12-01 17:44:02 +0900 (Mon, 01 Dec 2014)

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

  Message:
    Simplify Array for trivial types.

  Modified files:
    include/grnxx/array.hpp

  Modified: include/grnxx/array.hpp (+4 -29)
===================================================================
--- include/grnxx/array.hpp    2014-12-01 17:34:49 +0900 (0d217c9)
+++ include/grnxx/array.hpp    2014-12-01 17:44:02 +0900 (71ed433)
@@ -508,12 +508,6 @@ class Array<T, true> {
     if (new_size > capacity_) {
       resize_buffer(new_size);
     }
-    for (size_t i = new_size; i < size_; ++i) {
-      buffer()[i].~Value();
-    }
-    for (size_t i = size_; i < new_size; ++i) {
-      new (&buffer()[i]) Value;
-    }
     size_ = new_size;
   }
   // Resize "this" and fill the new values with "value".
@@ -523,29 +517,21 @@ class Array<T, true> {
     if (new_size > capacity_) {
       resize_buffer(new_size);
     }
-    for (size_t i = new_size; i < size_; ++i) {
-      buffer()[i].~Value();
-    }
     for (size_t i = size_; i < new_size; ++i) {
-      new (&buffer()[i]) Value(value);
+      buffer()[i] = value;
     }
     size_ = new_size;
   }
 
   // Clear the contents.
   void clear() {
-    for (size_t i = 0; i < size_; ++i) {
-      buffer()[i].~Value();
-    }
     size_ = 0;
   }
 
   // Remove the "i"-th value.
   void erase(size_t i) {
-    for (size_t j = i + 1; j < size_; ++j) {
-      buffer()[j - 1] = std::move(buffer()[j]);
-    }
-    buffer()[size_ - 1].~Value();
+    std::memmove(&buffer()[i], &buffer()[i + 1],
+                 sizeof(Value) * (size_ - i - 1));
     --size_;
   }
 
@@ -556,22 +542,11 @@ class Array<T, true> {
     if (size_ == capacity_) {
       resize_buffer(size_ + 1);
     }
-    new (&buffer()[size_]) Value(value);
-    ++size_;
-  }
-  // Append "value" to the end.
-  //
-  // On failure, throws an exception.
-  void push_back(Value &&value) {
-    if (size_ == capacity_) {
-      resize_buffer(size_ + 1);
-    }
-    new (&buffer()[size_]) Value(std::move(value));
+    buffer()[size_] = value;
     ++size_;
   }
   // Remove the last value.
   void pop_back() {
-    buffer()[size_ - 1].~Value();
     --size_;
   }
 
-------------- next part --------------
HTML����������������������������...
Download 



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