[Bf-blender-cvs] [f63d9357bfc] functions: new Vector.append_and_get_index function

Jacques Lucke noreply at git.blender.org
Sat Nov 23 18:05:09 CET 2019


Commit: f63d9357bfc9d71390bac9f1a2b31e151b629b3c
Author: Jacques Lucke
Date:   Sat Nov 23 14:57:27 2019 +0100
Branches: functions
https://developer.blender.org/rBf63d9357bfc9d71390bac9f1a2b31e151b629b3c

new Vector.append_and_get_index function

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

M	source/blender/blenkernel/intern/virtual_node_tree.cc
M	source/blender/blenlib/BLI_vector.h
M	tests/gtests/blenlib/BLI_vector_test.cc

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

diff --git a/source/blender/blenkernel/intern/virtual_node_tree.cc b/source/blender/blenkernel/intern/virtual_node_tree.cc
index 57a2311310a..ca23753465d 100644
--- a/source/blender/blenkernel/intern/virtual_node_tree.cc
+++ b/source/blender/blenkernel/intern/virtual_node_tree.cc
@@ -28,40 +28,35 @@ VirtualNodeTree::VirtualNodeTree(bNodeTree *btree) : m_btree(btree)
 
     vnode.m_vtree = &vtree;
     vnode.m_bnode = bnode;
-    vnode.m_id = vtree.m_nodes_by_id.size();
+    vnode.m_id = vtree.m_nodes_by_id.append_and_get_index(&vnode);
     RNA_pointer_create(&btree->id, &RNA_Node, bnode, &vnode.m_rna);
 
     for (bNodeSocket *bsocket : BSocketList(bnode->inputs)) {
       VInputSocket &vsocket = *vtree.m_allocator.construct<VInputSocket>().release();
 
       vsocket.m_node = &vnode;
-      vsocket.m_index = vnode.m_inputs.size();
+      vsocket.m_index = vnode.m_inputs.append_and_get_index(&vsocket);
       vsocket.m_is_input = true;
       vsocket.m_bsocket = bsocket;
-      vsocket.m_id = vtree.m_sockets_by_id.size();
+      vsocket.m_id = vtree.m_sockets_by_id.append_and_get_index(&vsocket);
       RNA_pointer_create(&btree->id, &RNA_NodeSocket, bsocket, &vsocket.m_rna);
 
-      vnode.m_inputs.append(&vsocket);
       vtree.m_input_sockets.append(&vsocket);
-      vtree.m_sockets_by_id.append(&vsocket);
     }
 
     for (bNodeSocket *bsocket : BSocketList(bnode->outputs)) {
       VOutputSocket &vsocket = *vtree.m_allocator.construct<VOutputSocket>().release();
 
       vsocket.m_node = &vnode;
-      vsocket.m_index = vnode.m_outputs.size();
+      vsocket.m_index = vnode.m_outputs.append_and_get_index(&vsocket);
       vsocket.m_is_input = false;
       vsocket.m_bsocket = bsocket;
-      vsocket.m_id = vtree.m_sockets_by_id.size();
+      vsocket.m_id = vtree.m_sockets_by_id.append_and_get_index(&vsocket);
       RNA_pointer_create(&btree->id, &RNA_NodeSocket, bsocket, &vsocket.m_rna);
 
-      vnode.m_outputs.append(&vsocket);
       vtree.m_output_sockets.append(&vsocket);
-      vtree.m_sockets_by_id.append(&vsocket);
     }
 
-    vtree.m_nodes_by_id.append(&vnode);
     node_mapping.add_new(bnode, &vnode);
   }
 
diff --git a/source/blender/blenlib/BLI_vector.h b/source/blender/blenlib/BLI_vector.h
index 5f01f3ac2b3..b2fc53a4fac 100644
--- a/source/blender/blenlib/BLI_vector.h
+++ b/source/blender/blenlib/BLI_vector.h
@@ -295,6 +295,13 @@ template<typename T, uint N = 4, typename Allocator = GuardedAllocator> class Ve
     this->append_unchecked(std::move(value));
   }
 
+  uint append_and_get_index(const T &value)
+  {
+    uint index = this->size();
+    this->append(value);
+    return index;
+  }
+
   void append_unchecked(const T &value)
   {
     BLI_assert(m_end < m_capacity_end);
diff --git a/tests/gtests/blenlib/BLI_vector_test.cc b/tests/gtests/blenlib/BLI_vector_test.cc
index f258e50a60c..69015a96582 100644
--- a/tests/gtests/blenlib/BLI_vector_test.cc
+++ b/tests/gtests/blenlib/BLI_vector_test.cc
@@ -216,6 +216,16 @@ TEST(vector, Append)
   EXPECT_EQ(vec[2], 7);
 }
 
+TEST(vector, AppendAndGetIndex)
+{
+  IntVector vec;
+  EXPECT_EQ(vec.append_and_get_index(10), 0);
+  EXPECT_EQ(vec.append_and_get_index(10), 1);
+  EXPECT_EQ(vec.append_and_get_index(10), 2);
+  vec.append(10);
+  EXPECT_EQ(vec.append_and_get_index(10), 4);
+}
+
 TEST(vector, Fill)
 {
   IntVector vec(5);



More information about the Bf-blender-cvs mailing list