[Bf-blender-cvs] [dc7f88fd152] master: BLI: prioritize detecting single values higher than detecting spans

Jacques Lucke noreply at git.blender.org
Sun Apr 24 14:34:41 CEST 2022


Commit: dc7f88fd152fc76effe1c73d3228fe3dac3d14dc
Author: Jacques Lucke
Date:   Sun Apr 24 14:32:03 2022 +0200
Branches: master
https://developer.blender.org/rBdc7f88fd152fc76effe1c73d3228fe3dac3d14dc

BLI: prioritize detecting single values higher than detecting spans

In some contexts, single values can be handled more efficiently than spans.

===================================================================

M	source/blender/blenlib/BLI_generic_virtual_array.hh

===================================================================

diff --git a/source/blender/blenlib/BLI_generic_virtual_array.hh b/source/blender/blenlib/BLI_generic_virtual_array.hh
index 4aed1caf796..2e756e912f9 100644
--- a/source/blender/blenlib/BLI_generic_virtual_array.hh
+++ b/source/blender/blenlib/BLI_generic_virtual_array.hh
@@ -854,14 +854,14 @@ template<typename T> inline GVArray::GVArray(const VArray<T> &varray)
   if (varray.may_have_ownership()) {
     *this = GVArray::For<GVArrayImpl_For_VArray<T>>(varray);
   }
-  else if (varray.is_span()) {
-    Span<T> data = varray.get_internal_span();
-    *this = GVArray::ForSpan(data);
-  }
   else if (varray.is_single()) {
     T value = varray.get_internal_single();
     *this = GVArray::ForSingle(CPPType::get<T>(), varray.size(), &value);
   }
+  else if (varray.is_span()) {
+    Span<T> data = varray.get_internal_span();
+    *this = GVArray::ForSpan(data);
+  }
   else {
     *this = GVArray::For<GVArrayImpl_For_VArray<T>>(varray);
   }
@@ -880,15 +880,15 @@ template<typename T> inline VArray<T> GVArray::typed() const
   if (this->may_have_ownership()) {
     return VArray<T>::template For<VArrayImpl_For_GVArray<T>>(*this);
   }
-  if (this->is_span()) {
-    const Span<T> span = this->get_internal_span().typed<T>();
-    return VArray<T>::ForSpan(span);
-  }
   if (this->is_single()) {
     T value;
     this->get_internal_single(&value);
     return VArray<T>::ForSingle(value, this->size());
   }
+  if (this->is_span()) {
+    const Span<T> span = this->get_internal_span().typed<T>();
+    return VArray<T>::ForSpan(span);
+  }
   return VArray<T>::template For<VArrayImpl_For_GVArray<T>>(*this);
 }



More information about the Bf-blender-cvs mailing list