[Bf-blender-cvs] [7588b4e4935] functions-experimental-refactor: separate declaration and implementation

Jacques Lucke noreply at git.blender.org
Tue Oct 15 15:57:13 CEST 2019


Commit: 7588b4e4935dd1bf6a0ed07f47f56655336d54fb
Author: Jacques Lucke
Date:   Fri Oct 11 12:42:09 2019 +0200
Branches: functions-experimental-refactor
https://developer.blender.org/rB7588b4e4935dd1bf6a0ed07f47f56655336d54fb

separate declaration and implementation

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

M	source/blender/blenkernel/intern/BKE_multi_functions.h
M	source/blender/blenkernel/intern/multi_functions.cc

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

diff --git a/source/blender/blenkernel/intern/BKE_multi_functions.h b/source/blender/blenkernel/intern/BKE_multi_functions.h
index e5b8388a817..0951501dcd4 100644
--- a/source/blender/blenkernel/intern/BKE_multi_functions.h
+++ b/source/blender/blenkernel/intern/BKE_multi_functions.h
@@ -10,6 +10,57 @@ class MultiFunction_AddFloats final : public MultiFunction {
   void call(ArrayRef<uint> mask_indices, Params &params) const override;
 };
 
+class MultiFunction_VectorDistance final : public MultiFunction {
+  void signature(Signature &signature) const override;
+  void call(ArrayRef<uint> mask_indices, Params &params) const override;
+};
+
+class MultiFunction_FloatArraySum final : public MultiFunction {
+  void signature(Signature &signature) const override;
+  void call(ArrayRef<uint> mask_indices, Params &params) const override;
+};
+
+class MultiFunction_FloatRange final : public MultiFunction {
+  void signature(Signature &signature) const override;
+  void call(ArrayRef<uint> mask_indices, Params &params) const override;
+};
+
+class MultiFunction_AppendToList final : public MultiFunction {
+ private:
+  CPPType &m_base_type;
+
+ public:
+  void signature(Signature &signature) const override;
+  void call(ArrayRef<uint> mask_indices, Params &params) const override;
+};
+
+class MultiFunction_GetListElement final : public MultiFunction {
+ private:
+  CPPType &m_base_type;
+
+ public:
+  void signature(Signature &signature) const override;
+  void call(ArrayRef<uint> mask_indices, Params &params) const override;
+};
+
+class MultiFunction_ListLength final : public MultiFunction {
+ private:
+  CPPType &m_base_type;
+
+ public:
+  void signature(Signature &signature) const override;
+  void call(ArrayRef<uint> mask_indices, Params &params) const override;
+};
+
+class MultiFunction_CombineLists final : public MultiFunction {
+ private:
+  CPPType &m_base_type;
+
+ public:
+  void signature(Signature &signature) const override;
+  void call(ArrayRef<uint> mask_indices, Params &params) const override;
+};
+
 };  // namespace BKE
 
 #endif /* __BKE_MULTI_FUNCTIONS_H__ */
diff --git a/source/blender/blenkernel/intern/multi_functions.cc b/source/blender/blenkernel/intern/multi_functions.cc
index 75ad8468eb3..20e14d28b0d 100644
--- a/source/blender/blenkernel/intern/multi_functions.cc
+++ b/source/blender/blenkernel/intern/multi_functions.cc
@@ -30,172 +30,142 @@ void MultiFunction_AddFloats::call(ArrayRef<uint> mask_indices, Params &params)
   }
 }
 
-class MultiFunction_VectorDistance final : public MultiFunction {
-  void signature(Signature &signature) const override
-  {
-    signature.readonly_single_input<float3>("A");
-    signature.readonly_single_input<float3>("A");
-    signature.single_output<float>("Distances");
-  }
+void MultiFunction_VectorDistance::signature(Signature &signature) const
+{
+  signature.readonly_single_input<float3>("A");
+  signature.readonly_single_input<float3>("A");
+  signature.single_output<float>("Distances");
+}
 
-  void call(ArrayRef<uint> mask_indices, Params &params) const override
-  {
-    auto a = params.readonly_single_input<float3>(0, "A");
-    auto b = params.readonly_single_input<float3>(1, "B");
-    auto distances = params.single_output<float>(2, "Distances");
+void MultiFunction_VectorDistance::call(ArrayRef<uint> mask_indices, Params &params) const
+{
+  auto a = params.readonly_single_input<float3>(0, "A");
+  auto b = params.readonly_single_input<float3>(1, "B");
+  auto distances = params.single_output<float>(2, "Distances");
 
-    for (uint i : mask_indices) {
-      distances[i] = float3::distance(a[i], b[i]);
-    }
+  for (uint i : mask_indices) {
+    distances[i] = float3::distance(a[i], b[i]);
   }
-};
+}
 
-class MultiFunction_FloatArraySum final : public MultiFunction {
-  void signature(Signature &signature) const override
-  {
-    signature.readonly_vector_input<float>("Array");
-    signature.single_output<float>("Sum");
-  }
+void MultiFunction_FloatArraySum::signature(Signature &signature) const
+{
+  signature.readonly_vector_input<float>("Array");
+  signature.single_output<float>("Sum");
+}
 
-  void call(ArrayRef<uint> mask_indices, Params &params) const override
-  {
-    auto arrays = params.readonly_vector_input<float>(0, "Array");
-    MutableArrayRef<float> sums = params.single_output<float>(1, "Sum");
+void MultiFunction_FloatArraySum::call(ArrayRef<uint> mask_indices, Params &params) const
+{
+  auto arrays = params.readonly_vector_input<float>(0, "Array");
+  MutableArrayRef<float> sums = params.single_output<float>(1, "Sum");
 
-    for (uint i : mask_indices) {
-      float sum = 0.0f;
-      for (float value : arrays[i]) {
-        sum += value;
-      }
-      sums[i] = sum;
+  for (uint i : mask_indices) {
+    float sum = 0.0f;
+    for (float value : arrays[i]) {
+      sum += value;
     }
+    sums[i] = sum;
   }
-};
-
-class MultiFunction_FloatRange final : public MultiFunction {
-  void signature(Signature &signature) const override
-  {
-    signature.readonly_single_input<float>("Start");
-    signature.readonly_single_input<float>("Step");
-    signature.readonly_single_input<uint>("Amount");
-    signature.vector_output<float>("Range");
-  }
+}
 
-  void call(ArrayRef<uint> mask_indices, Params &params) const override
-  {
-    auto starts = params.readonly_single_input<float>(0, "Start");
-    auto steps = params.readonly_single_input<float>(1, "Step");
-    auto amounts = params.readonly_single_input<uint>(2, "Amount");
-    auto ranges = params.vector_output<float>(3, "Range");
-
-    for (uint i : mask_indices) {
-      for (uint j = 0; j < amounts[i]; j++) {
-        float value = starts[i] + j * steps[i];
-        ranges.append_single(i, value);
-      }
-    }
-  }
-};
+void MultiFunction_FloatRange::signature(Signature &signature) const
+{
+  signature.readonly_single_input<float>("Start");
+  signature.readonly_single_input<float>("Step");
+  signature.readonly_single_input<uint>("Amount");
+  signature.vector_output<float>("Range");
+}
 
-class MultiFunction_AppendToList final : public MultiFunction {
- private:
-  CPPType &m_base_type;
+void MultiFunction_FloatRange::call(ArrayRef<uint> mask_indices, Params &params) const
+{
+  auto starts = params.readonly_single_input<float>(0, "Start");
+  auto steps = params.readonly_single_input<float>(1, "Step");
+  auto amounts = params.readonly_single_input<uint>(2, "Amount");
+  auto ranges = params.vector_output<float>(3, "Range");
 
- public:
-  void signature(Signature &signature) const override
-  {
-    signature.mutable_vector("List", m_base_type);
-    signature.readonly_single_input("Value", m_base_type);
+  for (uint i : mask_indices) {
+    for (uint j = 0; j < amounts[i]; j++) {
+      float value = starts[i] + j * steps[i];
+      ranges.append_single(i, value);
+    }
   }
+}
 
-  void call(ArrayRef<uint> mask_indices, Params &params) const override
-  {
-    GenericVectorArray &lists = params.mutable_vector(0, "List");
-    GenericArrayOrSingleRef values = params.readonly_single_input(1, "Value");
+void MultiFunction_AppendToList::signature(Signature &signature) const
+{
+  signature.mutable_vector("List", m_base_type);
+  signature.readonly_single_input("Value", m_base_type);
+}
 
-    for (uint i : mask_indices) {
-      lists.append_single__copy(i, values[i]);
-    }
-  }
-};
-
-class MultiFunction_GetListElement final : public MultiFunction {
- private:
-  CPPType &m_base_type;
-
- public:
-  void signature(Signature &signature) const override
-  {
-    signature.readonly_vector_input("List", m_base_type);
-    signature.readonly_single_input<int>("Index");
-    signature.readonly_single_input("Fallback", m_base_type);
-    signature.single_output("Value", m_base_type);
-  }
+void MultiFunction_AppendToList::call(ArrayRef<uint> mask_indices, Params &params) const
+{
+  GenericVectorArray &lists = params.mutable_vector(0, "List");
+  GenericArrayOrSingleRef values = params.readonly_single_input(1, "Value");
 
-  void call(ArrayRef<uint> mask_indices, Params &params) const override
-  {
-    GenericVectorArrayOrSingleRef lists = params.readonly_vector_input(0, "List");
-    ArrayOrSingleRef<int> indices = params.readonly_single_input<int>(1, "Index");
-    GenericArrayOrSingleRef fallbacks = params.readonly_single_input(2, "Fallback");
-
-    GenericMutableArrayRef output_values = params.single_output(3, "Value");
-
-    for (uint i : mask_indices) {
-      int index = indices[i];
-      if (index >= 0) {
-        GenericArrayRef list = lists[i];
-        if (index < list.size()) {
-          m_base_type.copy_to_uninitialized(list[index], output_values[i]);
-          continue;
-        }
-      }
-      m_base_type.copy_to_uninitialized(fallbacks[i], output_values[i]);
-    }
+  for (uint i : mask_indices) {
+    lists.append_single__copy(i, values[i]);
   }
-};
+}
 
-class MultiFunction_ListLength final : public MultiFunction {
- private:
-  CPPType &m_base_type;
+void MultiFunction_GetListElement::signature(Signature &signature) const
+{
+  signature.readonly_vector_input("List", m_base_type);
+  signature.readonly_single_input<int>("Index");
+  signature.readonly_single_input("Fallback", m_base_type);
+  signature.single_output("Value", m_base_type);
+}
 
- public:
-  void signature(Signature &signature) const override
-  {
-    signature.readonly_vector_input("List", m_base_type);
-    signature.single_output<int>("Length");
-  }
+void MultiFunction_GetListElement::call(ArrayRef<uint> mask_indices, Params &params) const
+{
+  GenericVectorArrayOrSingleRef lists = params.readonly_vector_input(0, "List");
+  ArrayOrSingleRef<int> indices = params.readonly_single_input<int>(1, "Index");
+  GenericArrayOrSingleRef fallbacks = params.readonly_single_input(2, "Fallback");
 
-  void call(ArrayRef<uint> mask_indices, Params &params) const override
-  {
-    GenericVectorArrayOrSingleRef lists = params.readonly_vector_input(0, "List");
-    MutableArrayRef<int> lengths = params.single_output<int>(1, "Length");
+  GenericMutableArrayRef output_values = params.single_output(3, "Value");
 
-    for (uint i : mask_indices) {
-      lengths[i] = lists[i].size();
+  for (uint i : mask_in

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list