[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