[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