Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/blender/blenkernel/BKE_attribute_access.hh280
1 files changed, 161 insertions, 119 deletions
diff --git a/source/blender/blenkernel/BKE_attribute_access.hh b/source/blender/blenkernel/BKE_attribute_access.hh
index da3de2f08bd..3e9dfda7166 100644
--- a/source/blender/blenkernel/BKE_attribute_access.hh
+++ b/source/blender/blenkernel/BKE_attribute_access.hh
@@ -42,66 +42,21 @@ class AttributeIDRef {
const AnonymousAttributeID *anonymous_id_ = nullptr;
public:
- AttributeIDRef() = default;
-
- AttributeIDRef(StringRef name) : name_(name)
- {
- }
-
- AttributeIDRef(StringRefNull name) : name_(name)
- {
- }
-
- AttributeIDRef(const char *name) : name_(name)
- {
- }
-
- AttributeIDRef(const std::string &name) : name_(name)
- {
- }
-
- /* The anonymous id is only borrowed, the caller has to keep a reference to it. */
- AttributeIDRef(const AnonymousAttributeID *anonymous_id) : anonymous_id_(anonymous_id)
- {
- }
-
- operator bool() const
- {
- return this->is_named() || this->is_anonymous();
- }
-
- friend bool operator==(const AttributeIDRef &a, const AttributeIDRef &b)
- {
- return a.anonymous_id_ == b.anonymous_id_ && a.name_ == b.name_;
- }
-
- uint64_t hash() const
- {
- return get_default_hash_2(name_, anonymous_id_);
- }
-
- bool is_named() const
- {
- return !name_.is_empty();
- }
-
- bool is_anonymous() const
- {
- return anonymous_id_ != nullptr;
- }
-
- StringRef name() const
- {
- BLI_assert(this->is_named());
- return name_;
- }
-
- const AnonymousAttributeID &anonymous_id() const
- {
- BLI_assert(this->is_anonymous());
- return *anonymous_id_;
- }
-
+ AttributeIDRef();
+ AttributeIDRef(StringRef name);
+ AttributeIDRef(StringRefNull name);
+ AttributeIDRef(const char *name);
+ AttributeIDRef(const std::string &name);
+ AttributeIDRef(const AnonymousAttributeID *anonymous_id);
+
+ operator bool() const;
+ uint64_t hash() const;
+ bool is_named() const;
+ bool is_anonymous() const;
+ StringRef name() const;
+ const AnonymousAttributeID &anonymous_id() const;
+
+ friend bool operator==(const AttributeIDRef &a, const AttributeIDRef &b);
friend std::ostream &operator<<(std::ostream &stream, const AttributeIDRef &attribute_id);
};
@@ -259,73 +214,26 @@ class OutputAttribute {
bool save_has_been_called_ = false;
public:
- OutputAttribute() = default;
-
+ OutputAttribute();
+ OutputAttribute(OutputAttribute &&other);
OutputAttribute(GVMutableArrayPtr varray,
AttributeDomain domain,
SaveFn save,
- const bool ignore_old_values)
- : varray_(std::move(varray)),
- domain_(domain),
- save_(std::move(save)),
- ignore_old_values_(ignore_old_values)
- {
- }
-
- OutputAttribute(OutputAttribute &&other) = default;
+ const bool ignore_old_values);
~OutputAttribute();
- operator bool() const
- {
- return varray_.get() != nullptr;
- }
-
- GVMutableArray &operator*()
- {
- return *varray_;
- }
-
- GVMutableArray *operator->()
- {
- return varray_.get();
- }
+ operator bool() const;
- GVMutableArray &varray()
- {
- return *varray_;
- }
+ GVMutableArray &operator*();
+ GVMutableArray *operator->();
+ GVMutableArray &varray();
+ AttributeDomain domain() const;
+ const CPPType &cpp_type() const;
+ CustomDataType custom_data_type() const;
- AttributeDomain domain() const
- {
- return domain_;
- }
-
- const CPPType &cpp_type() const
- {
- return varray_->type();
- }
-
- CustomDataType custom_data_type() const
- {
- return cpp_type_to_custom_data_type(this->cpp_type());
- }
-
- fn::GMutableSpan as_span()
- {
- if (!optional_span_varray_) {
- const bool materialize_old_values = !ignore_old_values_;
- optional_span_varray_ = std::make_unique<fn::GVMutableArray_GSpan>(*varray_,
- materialize_old_values);
- }
- fn::GVMutableArray_GSpan &span_varray = *optional_span_varray_;
- return span_varray;
- }
-
- template<typename T> MutableSpan<T> as_span()
- {
- return this->as_span().typed<T>();
- }
+ fn::GMutableSpan as_span();
+ template<typename T> MutableSpan<T> as_span();
void save();
};
@@ -444,4 +352,138 @@ class CustomDataAttributes {
const AttributeDomain domain) const;
};
+/* --------------------------------------------------------------------
+ * #AttributeIDRef inline methods.
+ */
+
+inline AttributeIDRef::AttributeIDRef() = default;
+
+inline AttributeIDRef::AttributeIDRef(StringRef name) : name_(name)
+{
+}
+
+inline AttributeIDRef::AttributeIDRef(StringRefNull name) : name_(name)
+{
+}
+
+inline AttributeIDRef::AttributeIDRef(const char *name) : name_(name)
+{
+}
+
+inline AttributeIDRef::AttributeIDRef(const std::string &name) : name_(name)
+{
+}
+
+/* The anonymous id is only borrowed, the caller has to keep a reference to it. */
+inline AttributeIDRef::AttributeIDRef(const AnonymousAttributeID *anonymous_id)
+ : anonymous_id_(anonymous_id)
+{
+}
+
+inline bool operator==(const AttributeIDRef &a, const AttributeIDRef &b)
+{
+ return a.anonymous_id_ == b.anonymous_id_ && a.name_ == b.name_;
+}
+
+inline AttributeIDRef::operator bool() const
+{
+ return this->is_named() || this->is_anonymous();
+}
+
+inline uint64_t AttributeIDRef::hash() const
+{
+ return get_default_hash_2(name_, anonymous_id_);
+}
+
+inline bool AttributeIDRef::is_named() const
+{
+ return !name_.is_empty();
+}
+
+inline bool AttributeIDRef::is_anonymous() const
+{
+ return anonymous_id_ != nullptr;
+}
+
+inline StringRef AttributeIDRef::name() const
+{
+ BLI_assert(this->is_named());
+ return name_;
+}
+
+inline const AnonymousAttributeID &AttributeIDRef::anonymous_id() const
+{
+ BLI_assert(this->is_anonymous());
+ return *anonymous_id_;
+}
+
+/* --------------------------------------------------------------------
+ * #OutputAttribute inline methods.
+ */
+
+inline OutputAttribute::OutputAttribute() = default;
+inline OutputAttribute::OutputAttribute(OutputAttribute &&other) = default;
+
+inline OutputAttribute::OutputAttribute(GVMutableArrayPtr varray,
+ AttributeDomain domain,
+ SaveFn save,
+ const bool ignore_old_values)
+ : varray_(std::move(varray)),
+ domain_(domain),
+ save_(std::move(save)),
+ ignore_old_values_(ignore_old_values)
+{
+}
+
+inline OutputAttribute::operator bool() const
+{
+ return varray_.get() != nullptr;
+}
+
+inline GVMutableArray &OutputAttribute::operator*()
+{
+ return *varray_;
+}
+
+inline GVMutableArray *OutputAttribute::operator->()
+{
+ return varray_.get();
+}
+
+inline GVMutableArray &OutputAttribute::varray()
+{
+ return *varray_;
+}
+
+inline AttributeDomain OutputAttribute::domain() const
+{
+ return domain_;
+}
+
+inline const CPPType &OutputAttribute::cpp_type() const
+{
+ return varray_->type();
+}
+
+inline CustomDataType OutputAttribute::custom_data_type() const
+{
+ return cpp_type_to_custom_data_type(this->cpp_type());
+}
+
+inline fn::GMutableSpan OutputAttribute::as_span()
+{
+ if (!optional_span_varray_) {
+ const bool materialize_old_values = !ignore_old_values_;
+ optional_span_varray_ = std::make_unique<fn::GVMutableArray_GSpan>(*varray_,
+ materialize_old_values);
+ }
+ fn::GVMutableArray_GSpan &span_varray = *optional_span_varray_;
+ return span_varray;
+}
+
+template<typename T> inline MutableSpan<T> OutputAttribute::as_span()
+{
+ return this->as_span().typed<T>();
+}
+
} // namespace blender::bke