Commit: 7fbebda942d0b94f8317c321c0543fcdd7de5fa4
Author: Jacques Lucke
Date:   Mon Jan 21 17:02:29 2019 +0100
Branches: functions
https://developer.blender.org/rB7fbebda942d0b94f8317c321c0543fcdd7de5fa4

basic code structure

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

M       build_files/cmake/macros.cmake
M       source/blender/CMakeLists.txt
A       source/blender/blenlib/BLI_small_vector.hpp
M       source/blender/blenlib/CMakeLists.txt
M       source/blender/editors/object/CMakeLists.txt
M       source/blender/editors/object/object_edit.c
M       source/blender/editors/object/object_intern.h
M       source/blender/editors/object/object_ops.c
A       source/blender/functions/CMakeLists.txt
A       source/blender/functions/FN_functions.h
A       source/blender/functions/FN_functions.hpp
D       source/blender/functions/FN_funtions.h
A       source/blender/functions/intern/c_wrapper.cpp
A       source/blender/functions/intern/function.cpp
A       source/blender/functions/types/numeric.hpp
A       source/blender/functions/types/types.hpp

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

diff --git a/build_files/cmake/macros.cmake b/build_files/cmake/macros.cmake
index 5b6e3fa0011..9caf9971c38 100644
--- a/build_files/cmake/macros.cmake
+++ b/build_files/cmake/macros.cmake
@@ -624,6 +624,7 @@ function(SETUP_BLENDER_SORTED_LIBS)
                bf_python_gpu
                bf_python_bmesh
                bf_freestyle
+               bf_functions
                bf_ikplugin
                bf_modifiers
                bf_gpencil_modifiers
diff --git a/source/blender/CMakeLists.txt b/source/blender/CMakeLists.txt
index c51e0b5b01c..6a2158a8557 100644
--- a/source/blender/CMakeLists.txt
+++ b/source/blender/CMakeLists.txt
@@ -111,6 +111,7 @@ add_subdirectory(nodes)
 add_subdirectory(modifiers)
 add_subdirectory(gpencil_modifiers)
 add_subdirectory(shader_fx)
+add_subdirectory(functions)
 add_subdirectory(makesdna)
 add_subdirectory(makesrna)
 
diff --git a/source/blender/blenlib/BLI_small_vector.hpp 
b/source/blender/blenlib/BLI_small_vector.hpp
new file mode 100644
index 00000000000..ec933d5bb08
--- /dev/null
+++ b/source/blender/blenlib/BLI_small_vector.hpp
@@ -0,0 +1,17 @@
+#pragma once
+
+#include "BLI_utildefines.h"
+#include <vector>
+
+namespace BLI {
+
+       template<typename T, uint N = 4>
+       class SmallVector {
+       public:
+               SmallVector() {}
+
+       private:
+               std::vector<T> elements;
+       };
+
+} /* namespace BLI */
\ No newline at end of file
diff --git a/source/blender/blenlib/CMakeLists.txt 
b/source/blender/blenlib/CMakeLists.txt
index f1aac6cd5b2..3f89a1c6603 100644
--- a/source/blender/blenlib/CMakeLists.txt
+++ b/source/blender/blenlib/CMakeLists.txt
@@ -224,6 +224,8 @@ set(SRC
        BLI_winstuff.h
        PIL_time.h
        PIL_time_utildefines.h
+
+       BLI_small_vector.hpp
 )
 
 if(WITH_MEM_VALGRIND)
diff --git a/source/blender/editors/object/CMakeLists.txt 
b/source/blender/editors/object/CMakeLists.txt
index f15427e61ac..a0d7555c0c6 100644
--- a/source/blender/editors/object/CMakeLists.txt
+++ b/source/blender/editors/object/CMakeLists.txt
@@ -33,6 +33,7 @@ set(INC
        ../../python
        ../../render/extern/include
        ../../windowmanager
+       ../../functions
        ../../../../intern/guardedalloc
        ../../../../intern/glew-mx
 )
diff --git a/source/blender/editors/object/object_edit.c 
b/source/blender/editors/object/object_edit.c
index 89f043966db..bd25ec2c799 100644
--- a/source/blender/editors/object/object_edit.c
+++ b/source/blender/editors/object/object_edit.c
@@ -1743,3 +1743,29 @@ void OBJECT_OT_link_to_collection(wmOperatorType *ot)
                              "Name of the newly added collection");
        RNA_def_property_flag(prop, PROP_SKIP_SAVE);
 }
+
+#include "FN_functions.h"
+
+static int test_functions_exec(bContext *UNUSED(C), wmOperator *UNUSED(op))
+{
+       FunctionRef fn = NULL;
+       FnTypeRef type = FN_type_get_float_vector_3d();
+       printf("Type: %s\n", FN_type_name(type));
+       printf("Finished\n");
+       return OPERATOR_FINISHED;
+}
+
+
+void TEST_OT_test_functions(wmOperatorType *ot)
+{
+       /* identifiers */
+       ot->name = "Test Functions";
+       ot->description = "Test Functions";
+       ot->idname = "TEST_OT_test_functions";
+
+       /* api callbacks */
+       ot->exec = test_functions_exec;
+
+       /* flags */
+       ot->flag = OPTYPE_REGISTER;
+}
\ No newline at end of file
diff --git a/source/blender/editors/object/object_intern.h 
b/source/blender/editors/object/object_intern.h
index ff153488042..fc349f43827 100644
--- a/source/blender/editors/object/object_intern.h
+++ b/source/blender/editors/object/object_intern.h
@@ -277,4 +277,6 @@ void TRANSFORM_OT_vertex_random(struct wmOperatorType *ot);
 void OBJECT_OT_data_transfer(struct wmOperatorType *ot);
 void OBJECT_OT_datalayout_transfer(struct wmOperatorType *ot);
 
+void TEST_OT_test_functions(struct wmOperatorType *ot);
+
 #endif /* __OBJECT_INTERN_H__ */
diff --git a/source/blender/editors/object/object_ops.c 
b/source/blender/editors/object/object_ops.c
index 5d9aeab7eb8..e2715400251 100644
--- a/source/blender/editors/object/object_ops.c
+++ b/source/blender/editors/object/object_ops.c
@@ -259,6 +259,8 @@ void ED_operatortypes_object(void)
        WM_operatortype_append(OBJECT_OT_hide_view_clear);
        WM_operatortype_append(OBJECT_OT_hide_view_set);
        WM_operatortype_append(OBJECT_OT_hide_collection);
+
+       WM_operatortype_append(TEST_OT_test_functions);
 }
 
 void ED_operatormacros_object(void)
diff --git a/source/blender/functions/CMakeLists.txt 
b/source/blender/functions/CMakeLists.txt
new file mode 100644
index 00000000000..53596722345
--- /dev/null
+++ b/source/blender/functions/CMakeLists.txt
@@ -0,0 +1,20 @@
+set(INC
+       .
+       ../blenlib
+)
+
+set(INC_SYS
+)
+
+set(SRC
+       intern/c_wrapper.cpp
+       intern/function.cpp
+
+       FN_functions.h
+       FN_functions.hpp
+
+       types/numeric.hpp
+       types/types.hpp
+)
+
+blender_add_lib(bf_functions "${SRC}" "${INC}" "${INC_SYS}")
diff --git a/source/blender/functions/FN_functions.h 
b/source/blender/functions/FN_functions.h
new file mode 100644
index 00000000000..dd6f88b7f52
--- /dev/null
+++ b/source/blender/functions/FN_functions.h
@@ -0,0 +1,69 @@
+#ifndef __FUNCTIONS_H__
+#define __FUNCTIONS_H__
+
+#include "BLI_utildefines.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct Function *FunctionRef;
+typedef struct FnType *FnTypeRef;
+typedef struct FnInputs *FnInputsRef;
+typedef struct FnOutputs *FnOutputsRef;
+
+/* Split ownership of the function. */
+void FN_function_copy_ref(FunctionRef fn);
+
+/* Tag the function as unused by the caller. */
+void FN_function_free_ref(FunctionRef fn);
+
+
+/* Raw function pointer to call when the function should be executed. */
+void *FN_function_get_pointer(FunctionRef fn);
+
+/* Pass into the function as first argument. */
+void *FN_function_get_settings(FunctionRef fn);
+
+/* Call a function with the given input.
+ * The function output will be written into fn_out.
+ * Returns true on success. */
+bool FN_function_call(FunctionRef fn, FnInputsRef fn_in, FnOutputsRef fn_out);
+
+
+/* Create a container to store function inputs. */
+FnInputsRef FN_inputs_new(FunctionRef fn);
+
+/* Free a set of function inputs. */
+void FN_inputs_free(FnInputsRef fn_in);
+
+/* Set a funtion input by name. Returns true on success. */
+bool FN_inputs_set_name(FnInputsRef fn_in, const char *name, void *value);
+
+/* Set a function input by index. Returns true on success. */
+bool FN_inputs_set_index(FnInputsRef fn_in, uint index, void *value);
+
+
+/* Create a container to store function outputs. */
+FnOutputsRef FN_outputs_new(FunctionRef fn);
+
+/* Free a set of output functions. */
+void FN_outputs_free(FnOutputsRef fn_out);
+
+/* Extract the result of an executed function by name. */
+void *FN_outputs_get_name(FnOutputsRef fn_out, const char *name);
+
+/* Extract the result of an executed function by index. */
+void *FN_outputs_get_index(FnOutputsRef fn_out, const char *name);
+
+const char *FN_type_name(FnTypeRef type);
+
+FnTypeRef FN_type_get_float(void);
+FnTypeRef FN_type_get_int32(void);
+FnTypeRef FN_type_get_float_vector_3d(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* __FUNCTIONS_H__ */
diff --git a/source/blender/functions/FN_functions.hpp 
b/source/blender/functions/FN_functions.hpp
new file mode 100644
index 00000000000..f9f17ade2fe
--- /dev/null
+++ b/source/blender/functions/FN_functions.hpp
@@ -0,0 +1,64 @@
+#pragma once
+
+#include <string>
+
+#include "BLI_utildefines.h"
+#include "BLI_small_vector.hpp"
+
+namespace FN {
+       using namespace BLI;
+
+       class Type;
+       class Inputs;
+       class Outputs;
+       class Signature;
+       class Function;
+
+       class Type {
+       public:
+               const std::string &name() const;
+               const uint size() const;
+
+       protected:
+               std::string m_name;
+               uint m_size;
+       };
+
+       class Inputs {
+       public:
+               static Inputs *New(Function *fn);
+
+               bool set(uint index, void *value);
+
+       private:
+               Inputs() {}
+
+               Function *fn;
+       };
+
+       class Outputs {
+       public:
+               static Outputs *New(Function *fn);
+
+               bool get(uint index, void *value);
+
+       private:
+               Outputs() {}
+
+               Function *fn;
+       };
+
+       class Signature {
+       private:
+               SmallVector<Type *> inputs;
+               SmallVector<Type *> outputs;
+       };
+
+       class Function {
+       public:
+               bool call(Inputs *fn_in, Outputs *fn_out);
+
+       private:
+               Signature *signature;
+       };
+} /* namespace FN */
diff --git a/source/blender/functions/FN_funtions.h 
b/source/blender/functions/FN_funtions.h
deleted file mode 100644
index 8d19c261bc4..00000000000
--- a/source/blender/functions/FN_funtions.h
+++ /dev/null
@@ -1,65 +0,0 @@
-#include "BLI_utildefines.h"
-
-struct Function;
-typedef struct Function Function;
-
-struct FnInputs;
-typedef struct FnInputs FnInputs;
-
-struct FnOutputs;
-typedef struct FnOutputs FnOutputs;
-
-struct FnStaticInputs;
-typedef struct FnStaticInputs FnStaticInputs;
-
-struct FnDependencies;
-typedef struct FnDependencies FnDependencies;
-
-/* Split ownership of the function. */
-void FN_function_copy_ref(Function *fn);
-
-/* Tag the function as unused by the caller. */
-void FN_function_free_ref(Function *fn);
-
-
-/* Raw function pointer to call when the function should be executed. */
-void *FN_function_get_pointer(Function *fn);
-
-/* Pass into the function as first argument. */
-void *FN_function_get_settings(Function *fn);
-
-/* Call a function with the given input.
- * The function output will be written into fn_out.
- * Returns true on success. */
-bool FN_function_call(Function *fn, FnInputs *fn_in, FnOutputs *fn_out);
-
-
-/* Create a container to store function inputs. */
-FnInputs *FN_inputs_new(Function *fn);
-
-/* Free a set of function inputs. */
-void FN_inputs_free(FnInputs *fn_in);
-
-/* Set a funtion input by name. Returns true on success. */
-bool FN_inputs_set_name(FnInputs *fn_in, const char *name, void *value);
-
-/* Set a function input by index. Returns true on success. */
-bool FN_inputs_set_index(FnInputs *fn_in, uint index, void *value);
-
-
-/* Create a container to store function outputs. */
-FnOutputs *FN_outputs_new(Function *fn);
-
-/* Free a set of output functions. */
-void FN_outputs_free(FnOutputs *fn_out);
-
-/* Extract the result of an executed function by name. */
-void *FN_outputs_get_name(FnOutputs *fn_out, const char *name);
-
-/* Extract the result of an executed function by index. */
-void *FN_outputs_get_index(FnOutputs *fn_out, const char *name);
-
-
-/* Get dependencies of function given some static inputs.
- * Returns NULL on failure (when not al

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to