[Bf-blender-cvs] [cd6a5b1b19e] virtual-array-attributes: simplify generic virtual array span

Jacques Lucke noreply at git.blender.org
Wed Apr 14 12:51:14 CEST 2021


Commit: cd6a5b1b19e01dd142009d28327536a9d40f7349
Author: Jacques Lucke
Date:   Wed Apr 14 12:38:00 2021 +0200
Branches: virtual-array-attributes
https://developer.blender.org/rBcd6a5b1b19e01dd142009d28327536a9d40f7349

simplify generic virtual array span

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

M	source/blender/blenkernel/BKE_attribute_access.hh
M	source/blender/blenkernel/intern/geometry_set_instances.cc
M	source/blender/functions/FN_generic_span.hh
M	source/blender/functions/FN_generic_virtual_array.hh
M	source/blender/functions/intern/generic_virtual_array.cc

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

diff --git a/source/blender/blenkernel/BKE_attribute_access.hh b/source/blender/blenkernel/BKE_attribute_access.hh
index 1048143b942..4111ffbf3ae 100644
--- a/source/blender/blenkernel/BKE_attribute_access.hh
+++ b/source/blender/blenkernel/BKE_attribute_access.hh
@@ -118,7 +118,7 @@ class OutputAttribute {
       optional_span_varray_.emplace(*varray_);
     }
     fn::GVMutableArray_Span &span_varray = *optional_span_varray_;
-    return span_varray.get_span();
+    return span_varray;
   }
 
   template<typename T> MutableSpan<T> as_span()
diff --git a/source/blender/blenkernel/intern/geometry_set_instances.cc b/source/blender/blenkernel/intern/geometry_set_instances.cc
index 2a0d94ce06e..3c40b732265 100644
--- a/source/blender/blenkernel/intern/geometry_set_instances.cc
+++ b/source/blender/blenkernel/intern/geometry_set_instances.cc
@@ -444,8 +444,7 @@ static void join_attributes(Span<GeometryInstanceGroup> set_groups,
       continue;
     }
 
-    fn::GVMutableArray_Span dst_span_varray{*write_attribute.varray};
-    fn::GMutableSpan dst_span = dst_span_varray.as_span();
+    fn::GVMutableArray_Span dst_span{*write_attribute.varray};
 
     int offset = 0;
     for (const GeometryInstanceGroup &set_group : set_groups) {
@@ -476,7 +475,7 @@ static void join_attributes(Span<GeometryInstanceGroup> set_groups,
       }
     }
 
-    dst_span_varray.apply();
+    dst_span.apply();
   }
 }
 
diff --git a/source/blender/functions/FN_generic_span.hh b/source/blender/functions/FN_generic_span.hh
index 31b67dd3d70..ea2bd49fa09 100644
--- a/source/blender/functions/FN_generic_span.hh
+++ b/source/blender/functions/FN_generic_span.hh
@@ -30,7 +30,7 @@ namespace blender::fn {
  * A generic span. It behaves just like a blender::Span<T>, but the type is only known at run-time.
  */
 class GSpan {
- private:
+ protected:
   const CPPType *type_;
   const void *data_;
   int64_t size_;
@@ -92,7 +92,7 @@ class GSpan {
  * known at run-time.
  */
 class GMutableSpan {
- private:
+ protected:
   const CPPType *type_;
   void *data_;
   int64_t size_;
diff --git a/source/blender/functions/FN_generic_virtual_array.hh b/source/blender/functions/FN_generic_virtual_array.hh
index feaf0ddb911..d0751d39e87 100644
--- a/source/blender/functions/FN_generic_virtual_array.hh
+++ b/source/blender/functions/FN_generic_virtual_array.hh
@@ -528,7 +528,7 @@ template<typename T> class GVMutableArray_For_VMutableArray : public GVMutableAr
   }
 };
 
-class GVArray_Span final : public GVArray_For_GSpan {
+class GVArray_Span final : public GSpan {
  private:
   const GVArray &varray_;
   void *owned_data_ = nullptr;
@@ -536,24 +536,9 @@ class GVArray_Span final : public GVArray_For_GSpan {
  public:
   GVArray_Span(const GVArray &varray);
   ~GVArray_Span();
-
-  GSpan as_span() const;
-  operator GSpan() const;
-
-  const void *data() const
-  {
-    return data_;
-  }
-
-  const void *operator[](const int64_t index)
-  {
-    BLI_assert(index >= 0);
-    BLI_assert(index < size_);
-    return POINTER_OFFSET(data_, index * element_size_);
-  }
 };
 
-class GVMutableArray_Span final : public GVMutableArray_For_GMutableSpan {
+class GVMutableArray_Span final : public GMutableSpan {
  private:
   GVMutableArray &varray_;
   void *owned_data_ = nullptr;
@@ -566,9 +551,6 @@ class GVMutableArray_Span final : public GVMutableArray_For_GMutableSpan {
 
   void apply();
   void disable_not_applied_warning();
-
-  GMutableSpan as_span();
-  operator GMutableSpan();
 };
 
 template<typename T> class GVArray_For_OwnedVArray : public GVArray_For_VArray<T> {
diff --git a/source/blender/functions/intern/generic_virtual_array.cc b/source/blender/functions/intern/generic_virtual_array.cc
index 379863e3ca1..dab090e18b1 100644
--- a/source/blender/functions/intern/generic_virtual_array.cc
+++ b/source/blender/functions/intern/generic_virtual_array.cc
@@ -220,8 +220,7 @@ GVArray_For_SingleValue::~GVArray_For_SingleValue()
  * GVArray_Span.
  */
 
-GVArray_Span::GVArray_Span(const GVArray &varray)
-    : GVArray_For_GSpan(varray.type(), varray.size()), varray_(varray)
+GVArray_Span::GVArray_Span(const GVArray &varray) : GSpan(varray.type()), varray_(varray)
 {
   if (varray_.is_span()) {
     data_ = varray_.get_span().data();
@@ -231,6 +230,7 @@ GVArray_Span::GVArray_Span(const GVArray &varray)
     varray_.materialize_to_uninitialized(IndexRange(size_), owned_data_);
     data_ = owned_data_;
   }
+  size_ = varray_.size();
 }
 
 GVArray_Span::~GVArray_Span()
@@ -241,22 +241,12 @@ GVArray_Span::~GVArray_Span()
   }
 }
 
-GSpan GVArray_Span::as_span() const
-{
-  return this->get_span();
-}
-
-GVArray_Span::operator GSpan() const
-{
-  return this->get_span();
-}
-
 /* --------------------------------------------------------------------
  * GVMutableArray_Span.
  */
 
 GVMutableArray_Span::GVMutableArray_Span(GVMutableArray &varray, const bool materialize)
-    : GVMutableArray_For_GMutableSpan(varray.type(), varray.size()), varray_(varray)
+    : GMutableSpan(varray.type()), varray_(varray)
 {
   if (varray_.is_span()) {
     data_ = varray_.get_span().data();
@@ -271,6 +261,7 @@ GVMutableArray_Span::GVMutableArray_Span(GVMutableArray &varray, const bool mate
     }
     data_ = owned_data_;
   }
+  size_ = varray_.size();
 }
 
 GVMutableArray_Span::~GVMutableArray_Span()
@@ -288,8 +279,9 @@ void GVMutableArray_Span::apply()
   if (data_ != owned_data_) {
     return;
   }
+  const int64_t element_size = type_->size();
   for (int64_t i : IndexRange(size_)) {
-    varray_.set_by_copy(i, POINTER_OFFSET(owned_data_, element_size_ * i));
+    varray_.set_by_copy(i, POINTER_OFFSET(owned_data_, element_size * i));
   }
 }
 
@@ -298,14 +290,4 @@ void GVMutableArray_Span::disable_not_applied_warning()
   show_not_applied_warning_ = false;
 }
 
-GMutableSpan GVMutableArray_Span::as_span()
-{
-  return this->get_span();
-}
-
-GVMutableArray_Span::operator GMutableSpan()
-{
-  return this->get_span();
-}
-
 }  // namespace blender::fn



More information about the Bf-blender-cvs mailing list