[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