[Bf-blender-cvs] [56ab056637c] functions-experimental-refactor: test function call

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


Commit: 56ab056637cdb7aca21bd711a4857e4fccf21cdc
Author: Jacques Lucke
Date:   Sun Oct 13 22:04:01 2019 +0200
Branches: functions-experimental-refactor
https://developer.blender.org/rB56ab056637cdb7aca21bd711a4857e4fccf21cdc

test function call

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

D	source/blender/blenkernel/BKE_cpp_function.h
M	source/blender/blenkernel/BKE_generic_array_ref.h
M	source/blender/blenkernel/BKE_generic_vector_array.h
M	source/blender/blenkernel/BKE_multi_function.h
R074	source/blender/blenkernel/intern/BKE_multi_functions.h	source/blender/blenkernel/BKE_multi_functions.h
M	source/blender/blenkernel/CMakeLists.txt
D	source/blender/blenkernel/intern/cpp_function.cc
M	source/blender/blenkernel/intern/cpp_types.cc
M	source/blender/blenkernel/intern/multi_functions.cc
M	source/blender/blenlib/BLI_lazy_init_cxx.h
M	source/blender/modifiers/intern/MOD_functiondeform_cxx.cc

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

diff --git a/source/blender/blenkernel/BKE_cpp_function.h b/source/blender/blenkernel/BKE_cpp_function.h
deleted file mode 100644
index 93e1f647426..00000000000
--- a/source/blender/blenkernel/BKE_cpp_function.h
+++ /dev/null
@@ -1,91 +0,0 @@
-#ifndef __BKE_CPP_FUNCTION_H__
-#define __BKE_CPP_FUNCTION_H__
-
-#include "BKE_cpp_type.h"
-#include "BKE_tuple.h"
-
-#include "BLI_vector.h"
-#include "BLI_string_ref.h"
-
-namespace BKE {
-
-using BLI::StringRef;
-using BLI::StringRefNull;
-using BLI::Vector;
-
-class CPPFunction;
-
-struct SignatureData {
-  std::string name;
-  Vector<CPPType *> input_types;
-  Vector<CPPType *> output_types;
-  Vector<std::string> input_names;
-  Vector<std::string> output_names;
-};
-
-class SignatureBuilderCPP {
- private:
-  SignatureData m_data;
-
-  friend CPPFunction;
-
- public:
-  void set_name(StringRef name)
-  {
-    m_data.name = name;
-  }
-
-  void add_input(StringRef name, CPPType &type)
-  {
-    m_data.input_names.append(name);
-    m_data.input_types.append(&type);
-  }
-
-  void add_output(StringRef name, CPPType &type)
-  {
-    m_data.output_names.append(name);
-    m_data.input_types.append(&type);
-  }
-};
-
-class CPPFunction {
- private:
-  SignatureData m_signature;
-
- public:
-  CPPFunction();
-
-  virtual ~CPPFunction();
-
-  StringRefNull name() const
-  {
-    return m_signature.name;
-  }
-
-  ArrayRef<CPPType *> input_types() const
-  {
-    return m_signature.input_types;
-  }
-
-  ArrayRef<CPPType *> output_types() const
-  {
-    return m_signature.output_types;
-  }
-
-  StringRefNull input_name(uint index) const
-  {
-    return m_signature.input_names[index];
-  }
-
-  StringRefNull output_name(uint index) const
-  {
-    return m_signature.output_names[index];
-  }
-
-  virtual void signature(SignatureBuilderCPP &signature) = 0;
-  virtual void call(TupleRef &fn_in, TupleRef &fn_out) const = 0;
-};
-
-}  // namespace BKE
-
-#endif /* __BKE_CPP_FUNCTION_H__ */
\ No newline at end of file
diff --git a/source/blender/blenkernel/BKE_generic_array_ref.h b/source/blender/blenkernel/BKE_generic_array_ref.h
index 759b909adce..3822a3fd468 100644
--- a/source/blender/blenkernel/BKE_generic_array_ref.h
+++ b/source/blender/blenkernel/BKE_generic_array_ref.h
@@ -27,7 +27,6 @@ class GenericArrayRef {
   GenericArrayRef(const CPPType &type, const void *buffer, uint size)
       : m_type(&type), m_buffer(buffer), m_size(size)
   {
-    BLI_assert(&type != nullptr);
     BLI_assert(buffer != nullptr || size == 0);
     BLI_assert(type.pointer_has_valid_alignment(buffer));
   }
@@ -88,6 +87,12 @@ class GenericArrayOrSingleRef {
     return GenericArrayOrSingleRef(type, buffer, array_size, false);
   }
 
+  template<typename T> static GenericArrayOrSingleRef FromArray(ArrayRef<T> array)
+  {
+    return GenericArrayOrSingleRef::FromArray(
+        GET_TYPE<T>(), (const void *)array.begin(), array.size());
+  }
+
   template<typename T> ArrayOrSingleRef<T> as_typed_ref() const
   {
     BLI_assert(GET_TYPE<T>().is_same_or_generalization(*m_type));
@@ -125,6 +130,12 @@ class GenericMutableArrayRef {
     BLI_assert(type->pointer_has_valid_alignment(buffer));
   }
 
+  template<typename T>
+  GenericMutableArrayRef(ArrayRef<T> array)
+      : GenericMutableArrayRef(&GET_TYPE<T>(), (void *)array.begin(), array.size())
+  {
+  }
+
   uint size() const
   {
     return m_size;
@@ -186,4 +197,4 @@ template<typename T> MutableArrayRefCPPType &GET_TYPE_mutable_array_ref()
 
 }  // namespace BKE
 
-#endif /* __BKE_GENERIC_ARRAY_REF_H__ */
\ No newline at end of file
+#endif /* __BKE_GENERIC_ARRAY_REF_H__ */
diff --git a/source/blender/blenkernel/BKE_generic_vector_array.h b/source/blender/blenkernel/BKE_generic_vector_array.h
index ab986b41fe8..1b4b4c9e853 100644
--- a/source/blender/blenkernel/BKE_generic_vector_array.h
+++ b/source/blender/blenkernel/BKE_generic_vector_array.h
@@ -169,7 +169,7 @@ class GenericVectorArrayOrSingleRef {
   CPPType *m_type;
 
  public:
-  GenericArrayRef operator[](uint index) const
+  GenericArrayRef operator[](uint UNUSED(index)) const
   {
     /* TODO */
     return GenericArrayRef(*m_type);
@@ -198,4 +198,4 @@ class GenericVectorArrayOrSingleRef {
 
 };  // namespace BKE
 
-#endif /* __BKE_GENERIC_MULTI_VECTOR_H__ */
\ No newline at end of file
+#endif /* __BKE_GENERIC_MULTI_VECTOR_H__ */
diff --git a/source/blender/blenkernel/BKE_multi_function.h b/source/blender/blenkernel/BKE_multi_function.h
index 6268f5ff48a..71b65fa96cd 100644
--- a/source/blender/blenkernel/BKE_multi_function.h
+++ b/source/blender/blenkernel/BKE_multi_function.h
@@ -28,6 +28,8 @@ class MultiFunction {
     Vector<uint> m_corrected_indices;
 
    public:
+    Signature() = default;
+
     Signature(Vector<std::string> param_names,
               Vector<ParamCategory> param_categories,
               Vector<CPPType *> param_base_types)
@@ -39,8 +41,8 @@ class MultiFunction {
       uint mutable_array_refs = 0;
       uint vector_array_or_single_refs = 0;
       uint vector_arrays = 0;
-      for (ParamCategory category : param_categories) {
-        uint corrected_index;
+      for (ParamCategory category : m_param_categories) {
+        uint corrected_index = 0;
         switch (category) {
           case ParamCategory::SingleInput:
             corrected_index = array_or_single_refs++;
@@ -187,6 +189,19 @@ class MultiFunction {
 
   class Params {
    public:
+    Params(ArrayRef<GenericArrayOrSingleRef> array_or_single_refs,
+           ArrayRef<GenericMutableArrayRef> mutable_array_refs,
+           ArrayRef<GenericVectorArrayOrSingleRef> vector_array_or_single_refs,
+           ArrayRef<GenericVectorArray *> vector_arrays,
+           const Signature &signature)
+        : m_array_or_single_refs(array_or_single_refs),
+          m_mutable_array_refs(mutable_array_refs),
+          m_vector_array_or_single_refs(vector_array_or_single_refs),
+          m_vector_arrays(vector_arrays),
+          m_signature(signature)
+    {
+    }
+
     template<typename T> ArrayOrSingleRef<T> readonly_single_input(uint index, StringRef name)
     {
       BLI_assert(m_signature.is_readonly_single_input<T>(index, name));
@@ -194,6 +209,7 @@ class MultiFunction {
     }
     GenericArrayOrSingleRef readonly_single_input(uint index, StringRef name)
     {
+      UNUSED_VARS_NDEBUG(name);
       BLI_assert(m_signature.is_readonly_single_input(index, name));
       uint corrected_index = m_signature.get_corrected_index(index);
       return m_array_or_single_refs[corrected_index];
@@ -206,6 +222,7 @@ class MultiFunction {
     }
     GenericMutableArrayRef single_output(uint index, StringRef name)
     {
+      UNUSED_VARS_NDEBUG(name);
       BLI_assert(m_signature.is_single_output(index, name));
       uint corrected_index = m_signature.get_corrected_index(index);
       return m_mutable_array_refs[corrected_index];
@@ -220,6 +237,7 @@ class MultiFunction {
     }
     GenericVectorArrayOrSingleRef readonly_vector_input(uint index, StringRef name)
     {
+      UNUSED_VARS_NDEBUG(name);
       BLI_assert(m_signature.is_readonly_vector_input(index, name));
       uint corrected_index = m_signature.get_corrected_index(index);
       return m_vector_array_or_single_refs[corrected_index];
@@ -233,6 +251,7 @@ class MultiFunction {
     }
     GenericVectorArray &vector_output(uint index, StringRef name)
     {
+      UNUSED_VARS_NDEBUG(name);
       BLI_assert(m_signature.is_vector_output(index, name));
       uint corrected_index = m_signature.get_corrected_index(index);
       return *m_vector_arrays[corrected_index];
@@ -240,6 +259,7 @@ class MultiFunction {
 
     GenericVectorArray &mutable_vector(uint index, StringRef name)
     {
+      UNUSED_VARS_NDEBUG(name);
       BLI_assert(m_signature.is_mutable_vector(index, name));
       uint corrected_index = m_signature.get_corrected_index(index);
       return *m_vector_arrays[corrected_index];
@@ -250,11 +270,23 @@ class MultiFunction {
     ArrayRef<GenericMutableArrayRef> m_mutable_array_refs;
     ArrayRef<GenericVectorArrayOrSingleRef> m_vector_array_or_single_refs;
     ArrayRef<GenericVectorArray *> m_vector_arrays;
-    Signature &m_signature;
+    const Signature &m_signature;
   };
 
-  virtual void signature(SignatureBuilder &signature) const = 0;
   virtual void call(ArrayRef<uint> mask_indices, Params &params) const = 0;
+
+  void set_signature(SignatureBuilder &signature_builder)
+  {
+    m_signature = signature_builder.build();
+  }
+
+  const Signature &signature() const
+  {
+    return m_signature;
+  }
+
+ private:
+  Signature m_signature;
 };
 
 };  // namespace BKE
diff --git a/source/blender/blenkernel/intern/BKE_multi_functions.h b/source/blender/blenkernel/BKE_multi_functions.h
similarity index 74%
rename from source/blender/blenkernel/intern/BKE_multi_functions.h
rename to source/blender/blenkernel/BKE_multi_functions.h
index 5b0ad434639..98334a727f9 100644
--- a/source/blender/blenkernel/intern/BKE_multi_functions.h
+++ b/source/blender/blenkernel/BKE_multi_functions.h
@@ -6,22 +6,26 @@
 namespace BKE {
 
 class MultiFunction_AddFloats final : public MultiFunction {
-  void signature(SignatureBuilder &signature) const override;
+ public:
+  MultiFunction_AddFloats();
   void call(ArrayRef<uint> mask_indices, Params &params) const override;
 };
 
 class MultiFunction_VectorDistance final : public MultiFunction {
-  void signature(SignatureBuilder &signature) const override;
+ public:
+  MultiFunction_VectorDistance();
   void call(ArrayRef<uint> mask_indices, Params &params) const override;
 };
 
 class MultiFunction_FloatArraySum final : public MultiFunction {
-  void signature(SignatureBuilder &signature) const override;
+ public:
+  MultiFunction_FloatArraySum();
   void call(ArrayRef<uint> mask_indices, Params &params) const override;
 };
 
 class MultiFunction_FloatRange final : public MultiFunction {
-  void signature(SignatureBuilder &signature) const override;
+ public:
+  MultiFunction_FloatRange();
   void call(ArrayRef<uint> mask_indices, Params &params) const override;
 };
 
@@ -30,7 +34,7 @@ class MultiFunction_AppendToList final : public MultiFunction {
   CPPType &m_base_type;
 
  public:
-  void signature(SignatureBuil

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list