[Bf-blender-cvs] [fdf3d0f1240] simulation-tree: cleanup

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


Commit: fdf3d0f1240f8a13eb431830325c0582ab9fe6b7
Author: Jacques Lucke
Date:   Wed Feb 19 14:31:06 2020 +0100
Branches: simulation-tree
https://developer.blender.org/rBfdf3d0f1240f8a13eb431830325c0582ab9fe6b7

cleanup

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

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 4d5b652c99c..8f6a3e06235 100644
--- a/source/blender/simulations/nodes/my_test_node.cc
+++ b/source/blender/simulations/nodes/my_test_node.cc
@@ -318,19 +318,15 @@ using DrawFunc =
 template<typename T> using TypedInitStorageFunc = std::function<void(T *)>;
 using CopyNodeFunc = std::function<void(bNode *dst_node, const bNode *src_node)>;
 
-struct NodeTypeCallbacks {
+class NodeTypeDefinition {
+ private:
+  bNodeType m_ntype;
   DeclareNodeFunc m_declare_node;
   InitStorageFunc m_init_storage;
   CopyStorageFunc m_copy_storage;
   FreeStorageFunc m_free_storage;
   CopyNodeFunc m_copy_node;
   DrawFunc m_draw;
-};
-
-class NodeTypeDefinition {
- private:
-  bNodeType m_ntype;
-  NodeTypeCallbacks *m_callbacks;
 
  public:
   NodeTypeDefinition(StringRef idname, StringRef ui_name, StringRef ui_description)
@@ -350,25 +346,23 @@ class NodeTypeDefinition {
     ui_name.copy(ntype->ui_name);
     ui_description.copy(ntype->ui_description);
 
-    m_callbacks = new NodeTypeCallbacks();
-    ntype->userdata = (void *)m_callbacks;
-    ntype->free_userdata = [](void *userdata) { delete (NodeTypeCallbacks *)userdata; };
+    ntype->userdata = (void *)this;
 
-    m_callbacks->m_declare_node = [](NodeBuilder &UNUSED(builder)) {};
-    m_callbacks->m_init_storage = []() { return nullptr; };
-    m_callbacks->m_copy_storage = [](void *storage) {
+    m_declare_node = [](NodeBuilder &UNUSED(builder)) {};
+    m_init_storage = []() { return nullptr; };
+    m_copy_storage = [](void *storage) {
       BLI_assert(storage == nullptr);
       UNUSED_VARS_NDEBUG(storage);
       return nullptr;
     };
-    m_callbacks->m_free_storage = [](void *storage) {
+    m_free_storage = [](void *storage) {
       BLI_assert(storage == nullptr);
       UNUSED_VARS_NDEBUG(storage);
     };
-    m_callbacks->m_draw = [](struct uiLayout *UNUSED(layout),
-                             struct bContext *UNUSED(C),
-                             struct PointerRNA *UNUSED(ptr)) {};
-    m_callbacks->m_copy_node = [](bNode *UNUSED(dst_node), const bNode *UNUSED(src_node)) {};
+    m_draw = [](struct uiLayout *UNUSED(layout),
+                struct bContext *UNUSED(C),
+                struct PointerRNA *UNUSED(ptr)) {};
+    m_copy_node = [](bNode *UNUSED(dst_node), const bNode *UNUSED(src_node)) {};
 
     ntype->poll = [](bNodeType *UNUSED(ntype), bNodeTree *UNUSED(ntree)) { return true; };
     ntype->initfunc = init_node;
@@ -377,8 +371,8 @@ class NodeTypeDefinition {
 
     ntype->draw_buttons = [](struct uiLayout *layout, struct bContext *C, struct PointerRNA *ptr) {
       bNode *node = (bNode *)ptr->data;
-      NodeTypeCallbacks *callbacks = (NodeTypeCallbacks *)node->typeinfo->userdata;
-      callbacks->m_draw(layout, C, ptr);
+      NodeTypeDefinition *def = type_from_node(node);
+      def->m_draw(layout, C, ptr);
     };
 
     ntype->draw_nodetype = node_draw_default;
@@ -391,7 +385,7 @@ class NodeTypeDefinition {
 
   void add_declaration(DeclareNodeFunc declare_fn)
   {
-    m_callbacks->m_declare_node = declare_fn;
+    m_declare_node = declare_fn;
   }
 
   void add_dna_storage(StringRef struct_name,
@@ -400,9 +394,9 @@ class NodeTypeDefinition {
                        FreeStorageFunc free_storage_fn)
   {
     struct_name.copy(m_ntype.storagename);
-    m_callbacks->m_init_storage = init_storage_fn;
-    m_callbacks->m_copy_storage = copy_storage_fn;
-    m_callbacks->m_free_storage = free_storage_fn;
+    m_init_storage = init_storage_fn;
+    m_copy_storage = copy_storage_fn;
+    m_free_storage = free_storage_fn;
   }
 
   template<typename T>
@@ -425,7 +419,7 @@ class NodeTypeDefinition {
 
   void add_copy_behavior(CopyNodeFunc copy_fn)
   {
-    m_callbacks->m_copy_node = copy_fn;
+    m_copy_node = copy_fn;
   }
 
   template<typename T>
@@ -440,7 +434,7 @@ class NodeTypeDefinition {
 
   void add_draw_fn(DrawFunc draw_fn)
   {
-    m_callbacks->m_draw = draw_fn;
+    m_draw = draw_fn;
   }
 
   void register_type()
@@ -448,32 +442,43 @@ class NodeTypeDefinition {
     nodeRegisterType(&m_ntype);
   }
 
+  static void declare_node(bNode *node, NodeBuilder &builder)
+  {
+    NodeTypeDefinition *def = type_from_node(node);
+    def->m_declare_node(builder);
+  }
+
  private:
+  static NodeTypeDefinition *type_from_node(bNode *node)
+  {
+    return (NodeTypeDefinition *)node->typeinfo->userdata;
+  }
+
   static void init_node(bNodeTree *ntree, bNode *node)
   {
-    NodeTypeCallbacks &callbacks = *(NodeTypeCallbacks *)node->typeinfo->userdata;
+    NodeTypeDefinition *def = type_from_node(node);
 
     LinearAllocator<> allocator;
     NodeDecl node_decl{*ntree, *node};
     NodeBuilder node_builder{allocator, node_decl};
-    node->storage = callbacks.m_init_storage();
-    callbacks.m_declare_node(node_builder);
+    node->storage = def->m_init_storage();
+    def->m_declare_node(node_builder);
     node_decl.build();
   }
 
   static void copy_node(bNodeTree *UNUSED(dst_ntree), bNode *dst_node, const bNode *src_node)
   {
     BLI_assert(dst_node->typeinfo == src_node->typeinfo);
-    NodeTypeCallbacks &callbacks = *(NodeTypeCallbacks *)dst_node->typeinfo->userdata;
+    NodeTypeDefinition *def = type_from_node(dst_node);
 
-    dst_node->storage = callbacks.m_copy_storage(src_node->storage);
-    callbacks.m_copy_node(dst_node, src_node);
+    dst_node->storage = def->m_copy_storage(src_node->storage);
+    def->m_copy_node(dst_node, src_node);
   }
 
   static void free_node(bNode *node)
   {
-    NodeTypeCallbacks &callbacks = *(NodeTypeCallbacks *)node->typeinfo->userdata;
-    callbacks.m_free_storage(node->storage);
+    NodeTypeDefinition *def = type_from_node(node);
+    def->m_free_storage(node->storage);
   }
 };
 
@@ -600,8 +605,7 @@ void update_sim_node_tree(bNodeTree *ntree)
   for (bNode *node : nodes) {
     NodeDecl node_decl{*ntree, *node};
     NodeBuilder builder{allocator, node_decl};
-    NodeTypeCallbacks *callbacks = (NodeTypeCallbacks *)node->typeinfo->userdata;
-    callbacks->m_declare_node(builder);
+    NodeTypeDefinition::declare_node(node, builder);
 
     if (!node_decl.sockets_are_correct()) {
       std::cout << "Rebuild\n";



More information about the Bf-blender-cvs mailing list