[Bf-blender-cvs] [14626601ab6] simulation-tree: simplify node storage initialization

Jacques Lucke noreply at git.blender.org
Wed Feb 19 16:12:15 CET 2020


Commit: 14626601ab62e5e714ae3a6c1cc11e400a7fefdc
Author: Jacques Lucke
Date:   Wed Feb 19 13:09:04 2020 +0100
Branches: simulation-tree
https://developer.blender.org/rB14626601ab62e5e714ae3a6c1cc11e400a7fefdc

simplify node storage initialization

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

M	source/blender/simulations/nodes/my_test_node.cc

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

diff --git a/source/blender/simulations/nodes/my_test_node.cc b/source/blender/simulations/nodes/my_test_node.cc
index e023423ab48..ff057cc027c 100644
--- a/source/blender/simulations/nodes/my_test_node.cc
+++ b/source/blender/simulations/nodes/my_test_node.cc
@@ -299,6 +299,7 @@ using InitStorageFunc = std::function<void *()>;
 using FreeStorageFunc = std::function<void(void *)>;
 using DrawFunc =
     std::function<void(struct uiLayout *layout, struct bContext *C, struct PointerRNA *ptr)>;
+template<typename T> using TypedInitStorageFunc = std::function<void(T *)>;
 
 struct NodeTypeCallbacks {
   DeclareNodeFunc m_declare_node;
@@ -331,6 +332,22 @@ static void setup_node_storage(bNodeType *ntype,
   callbacks->m_free_storage = free_storage_fn;
 }
 
+template<typename T>
+void setup_node_storage(bNodeType *ntype,
+                        StringRef storage_name,
+                        TypedInitStorageFunc<T> init_storage_fn)
+{
+  setup_node_storage(
+      ntype,
+      storage_name,
+      [init_storage_fn]() {
+        void *buffer = MEM_callocN(sizeof(T), __func__);
+        init_storage_fn((T *)buffer);
+        return buffer;
+      },
+      [](void *buffer) { MEM_freeN(buffer); });
+}
+
 static void setup_node_base(bNodeType *ntype,
                             StringRef idname,
                             StringRef ui_name,
@@ -374,11 +391,8 @@ void register_node_type_my_test_node()
   {
     static bNodeType ntype;
     setup_node_base(&ntype, "MyTestNode", "My Test Node", "My Description", declare_test_node);
-    setup_node_storage(
-        &ntype,
-        "MyTestNodeStorage",
-        []() { return MEM_callocN(sizeof(MyTestNodeStorage), __func__); },
-        [](void *storage) { MEM_freeN(storage); });
+    setup_node_storage<MyTestNodeStorage>(
+        &ntype, "MyTestNodeStorage", [](MyTestNodeStorage *storage) { storage->x = 3; });
 
     ntype.draw_buttons = [](uiLayout *layout, struct bContext *UNUSED(C), struct PointerRNA *ptr) {
       bNode *node = (bNode *)ptr->data;



More information about the Bf-blender-cvs mailing list