]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Simplify some code in AlignedVector. 12186/head
authorWolfgang Bangerth <bangerth@colostate.edu>
Tue, 11 May 2021 21:40:37 +0000 (15:40 -0600)
committerWolfgang Bangerth <bangerth@colostate.edu>
Tue, 11 May 2021 22:37:27 +0000 (16:37 -0600)
include/deal.II/base/aligned_vector.h

index 5859fe76ae3236b54e25cdac6031c388ec99dadb..aa52ee739604a62543b28f5df62a273932aef1ed 100644 (file)
@@ -930,16 +930,13 @@ AlignedVector<T>::resize_fast(const size_type new_size)
     {} // nothing to do here
   else if (new_size < old_size)
     {
-      // call destructor on fields that are released. doing it backward
-      // releases the elements in reverse order as compared to how they were
-      // created
+      // call destructor on fields that are released, if the type requires it.
+      // doing it backward releases the elements in reverse order as compared to
+      // how they were created
       if (std::is_trivial<T>::value == false)
-        {
-          while (used_elements_end != elements.get() + new_size)
-            (--used_elements_end)->~T();
-        }
-      else
-        used_elements_end = elements.get() + new_size;
+        for (T *p = used_elements_end - 1; p >= elements.get() + new_size; --p)
+          p->~T();
+      used_elements_end = elements.get() + new_size;
     }
   else // new_size > old_size
     {
@@ -969,16 +966,13 @@ AlignedVector<T>::resize(const size_type new_size)
     {} // nothing to do here
   else if (new_size < old_size)
     {
-      // call destructor on fields that are released. doing it backward
-      // releases the elements in reverse order as compared to how they were
-      // created
+      // call destructor on fields that are released, if the type requires it.
+      // doing it backward releases the elements in reverse order as compared to
+      // how they were created
       if (std::is_trivial<T>::value == false)
-        {
-          while (used_elements_end != elements.get() + new_size)
-            (--used_elements_end)->~T();
-        }
-      else
-        used_elements_end = elements.get() + new_size;
+        for (T *p = used_elements_end - 1; p >= elements.get() + new_size; --p)
+          p->~T();
+      used_elements_end = elements.get() + new_size;
     }
   else // new_size > old_size
     {
@@ -1006,16 +1000,13 @@ AlignedVector<T>::resize(const size_type new_size, const T &init)
     {} // nothing to do here
   else if (new_size < old_size)
     {
-      // call destructor on fields that are released. doing it backward
-      // releases the elements in reverse order as compared to how they were
-      // created
+      // call destructor on fields that are released, if the type requires it.
+      // doing it backward releases the elements in reverse order as compared to
+      // how they were created
       if (std::is_trivial<T>::value == false)
-        {
-          while (used_elements_end != elements.get() + new_size)
-            (--used_elements_end)->~T();
-        }
-      else
-        used_elements_end = elements.get() + new_size;
+        for (T *p = used_elements_end - 1; p >= elements.get() + new_size; --p)
+          p->~T();
+      used_elements_end = elements.get() + new_size;
     }
   else // new_size > old_size
     {

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.