[Bf-blender-cvs] [ad8dfb38235] temp-geometry-nodes-fields-prototype: cleanup
Jacques Lucke
noreply at git.blender.org
Wed Jul 28 14:14:20 CEST 2021
Commit: ad8dfb3823589c624c23c3139d6998ece9f1f8eb
Author: Jacques Lucke
Date: Mon Jul 26 18:18:11 2021 +0200
Branches: temp-geometry-nodes-fields-prototype
https://developer.blender.org/rBad8dfb3823589c624c23c3139d6998ece9f1f8eb
cleanup
===================================================================
M source/blender/functions/FN_generic_virtual_array.hh
===================================================================
diff --git a/source/blender/functions/FN_generic_virtual_array.hh b/source/blender/functions/FN_generic_virtual_array.hh
index dbb66ea8834..c1c2e8d218b 100644
--- a/source/blender/functions/FN_generic_virtual_array.hh
+++ b/source/blender/functions/FN_generic_virtual_array.hh
@@ -424,14 +424,18 @@ template<typename T> class GVArray_For_VArray : public GVArray {
/* Used to convert any generic virtual array into a typed one. */
template<typename T> class VArray_For_GVArray : public VArray<T> {
protected:
- const GVArray *varray_ = nullptr;
+ optional_ptr<const GVArray> varray_;
public:
- VArray_For_GVArray(const GVArray &varray) : VArray<T>(varray.size()), varray_(&varray)
+ VArray_For_GVArray(const GVArray &varray) : VArray<T>(varray.size()), varray_(varray)
{
BLI_assert(varray_->type().template is<T>());
}
+ VArray_For_GVArray(optional_ptr<const GVArray> varray) : varray_(std::move(varray))
+ {
+ }
+
protected:
VArray_For_GVArray(const int64_t size) : VArray<T>(size)
{
@@ -470,15 +474,20 @@ template<typename T> class VArray_For_GVArray : public VArray<T> {
/* Used to convert an generic mutable virtual array into a typed one. */
template<typename T> class VMutableArray_For_GVMutableArray : public VMutableArray<T> {
protected:
- GVMutableArray *varray_ = nullptr;
+ optional_ptr<GVMutableArray> varray_;
public:
VMutableArray_For_GVMutableArray(GVMutableArray &varray)
- : VMutableArray<T>(varray.size()), varray_(&varray)
+ : VMutableArray<T>(varray.size()), varray_(varray)
{
BLI_assert(varray.type().template is<T>());
}
+ VMutableArray_For_GVMutableArray(optional_ptr<GVMutableArray> varray)
+ : varray_(std::move(varray))
+ {
+ }
+
VMutableArray_For_GVMutableArray(const int64_t size) : VMutableArray<T>(size)
{
}
@@ -503,7 +512,7 @@ template<typename T> class VMutableArray_For_GVMutableArray : public VMutableArr
Span<T> get_internal_span_impl() const override
{
- return varray_->get_internal_span().template typed<T>();
+ return static_cast<const GVArray &>(*varray_).get_internal_span().template typed<T>();
}
bool is_single_impl() const override
@@ -522,7 +531,7 @@ template<typename T> class VMutableArray_For_GVMutableArray : public VMutableArr
/* Used to convert any typed virtual mutable array into a generic one. */
template<typename T> class GVMutableArray_For_VMutableArray : public GVMutableArray {
protected:
- VMutableArray<T> *varray_ = nullptr;
+ optional_ptr<VMutableArray<T>> varray_;
public:
GVMutableArray_For_VMutableArray(VMutableArray<T> &varray)
@@ -530,6 +539,11 @@ template<typename T> class GVMutableArray_For_VMutableArray : public GVMutableAr
{
}
+ GVMutableArray_For_VMutableArray(optional_ptr<VMutableArray<T>> varray)
+ : varray_(std::move(varray))
+ {
+ }
+
protected:
GVMutableArray_For_VMutableArray(const int64_t size) : GVMutableArray(CPPType::get<T>(), size)
{
@@ -552,7 +566,7 @@ template<typename T> class GVMutableArray_For_VMutableArray : public GVMutableAr
GSpan get_internal_span_impl() const override
{
- Span<T> span = varray_->get_internal_span();
+ Span<T> span = static_cast<const VArray<T> &>(*varray_).get_internal_span();
return span;
}
@@ -602,12 +616,12 @@ template<typename T> class GVMutableArray_For_VMutableArray : public GVMutableAr
const void *try_get_internal_varray_impl() const override
{
- return (const VArray<T> *)varray_;
+ return static_cast<const VArray<T> *>(&*varray_);
}
void *try_get_internal_mutable_varray_impl() override
{
- return varray_;
+ return &*varray_;
}
};
@@ -652,44 +666,6 @@ template<typename T> class GVArray_Span : public Span<T> {
}
};
-template<typename T> class VArray_For_OwnedGVArray : public VArray_For_GVArray<T> {
- private:
- GVArrayPtr owned_varray_;
-
- public:
- /* Takes ownership of varray and passes a reference to the base class. */
- VArray_For_OwnedGVArray(GVArrayPtr varray)
- : VArray_For_GVArray<T>(*varray), owned_varray_(std::move(varray))
- {
- }
-};
-
-template<typename T>
-class GVMutableArray_For_OwnedVMutableArray : public GVMutableArray_For_VMutableArray<T> {
- private:
- VMutableArrayPtr<T> owned_varray_;
-
- public:
- /* Takes ownership of varray and passes a reference to the base class. */
- GVMutableArray_For_OwnedVMutableArray(VMutableArrayPtr<T> varray)
- : GVMutableArray_For_VMutableArray<T>(*varray), owned_varray_(std::move(varray))
- {
- }
-};
-
-template<typename T>
-class VMutableArray_For_OwnedGVMutableArray : public VMutableArray_For_GVMutableArray<T> {
- private:
- GVMutableArrayPtr owned_varray_;
-
- public:
- /* Takes ownership of varray and passes a reference to the base class. */
- VMutableArray_For_OwnedGVMutableArray(GVMutableArrayPtr varray)
- : VMutableArray_For_GVMutableArray<T>(*varray), owned_varray_(std::move(varray))
- {
- }
-};
-
/* Utility to embed a typed virtual array into a generic one. This avoids one allocation and give
* the compiler more opportunity to optimize the generic virtual array. */
template<typename T, typename VArrayT>
@@ -717,7 +693,7 @@ class GVMutableArray_For_EmbeddedVMutableArray : public GVMutableArray_For_VMuta
GVMutableArray_For_EmbeddedVMutableArray(const int64_t size, Args &&... args)
: GVMutableArray_For_VMutableArray<T>(size), embedded_varray_(std::forward<Args>(args)...)
{
- this->varray_ = &embedded_varray_;
+ this->varray_ = embedded_varray_;
}
};
More information about the Bf-blender-cvs
mailing list