[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 ¶ms) 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 ¶ms) const override;
};
class MultiFunction_VectorDistance final : public MultiFunction {
- void signature(SignatureBuilder &signature) const override;
+ public:
+ MultiFunction_VectorDistance();
void call(ArrayRef<uint> mask_indices, Params ¶ms) const override;
};
class MultiFunction_FloatArraySum final : public MultiFunction {
- void signature(SignatureBuilder &signature) const override;
+ public:
+ MultiFunction_FloatArraySum();
void call(ArrayRef<uint> mask_indices, Params ¶ms) const override;
};
class MultiFunction_FloatRange final : public MultiFunction {
- void signature(SignatureBuilder &signature) const override;
+ public:
+ MultiFunction_FloatRange();
void call(ArrayRef<uint> mask_indices, Params ¶ms) 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