diff options
author | Jacques Lucke <jacques@blender.org> | 2022-04-24 15:32:03 +0300 |
---|---|---|
committer | Jacques Lucke <jacques@blender.org> | 2022-04-24 15:32:03 +0300 |
commit | dc7f88fd152fc76effe1c73d3228fe3dac3d14dc (patch) | |
tree | 04a05867f3fa00b89249d9c28a41c1123d01ad59 | |
parent | bba757ef81abd93a2ec33dbf6858fa4bf398c7d6 (diff) |
BLI: prioritize detecting single values higher than detecting spans
In some contexts, single values can be handled more efficiently than spans.
-rw-r--r-- | source/blender/blenlib/BLI_generic_virtual_array.hh | 16 |
1 files changed, 8 insertions, 8 deletions
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); } |