[Bf-blender-cvs] [f8909cfab72] functions: only wrap intrusive listbases for now
Jacques Lucke
noreply at git.blender.org
Wed Aug 7 12:00:30 CEST 2019
Commit: f8909cfab72c5fc84b876c6d0f9e6c6c3fdb9070
Author: Jacques Lucke
Date: Wed Aug 7 11:40:16 2019 +0200
Branches: functions
https://developer.blender.org/rBf8909cfab72c5fc84b876c6d0f9e6c6c3fdb9070
only wrap intrusive listbases for now
===================================================================
M source/blender/blenkernel/BKE_node_tree.hpp
M source/blender/blenkernel/intern/node_tree.cpp
M source/blender/blenlib/BLI_listbase_wrapper.hpp
M source/blender/blenlib/BLI_vector.hpp
M tests/gtests/blenlib/BLI_vector_test.cc
===================================================================
diff --git a/source/blender/blenkernel/BKE_node_tree.hpp b/source/blender/blenkernel/BKE_node_tree.hpp
index 031816da400..3892d31e480 100644
--- a/source/blender/blenkernel/BKE_node_tree.hpp
+++ b/source/blender/blenkernel/BKE_node_tree.hpp
@@ -15,7 +15,7 @@
namespace BKE {
using BLI::ArrayRef;
-using BLI::ListBaseWrapper;
+using BLI::IntrusiveListBaseWrapper;
using BLI::Map;
using BLI::MonotonicAllocator;
using BLI::MultiMap;
@@ -23,9 +23,9 @@ using BLI::StringRef;
using BLI::StringRefNull;
using BLI::Vector;
-using bNodeList = ListBaseWrapper<struct bNode *, true>;
-using bLinkList = ListBaseWrapper<struct bNodeLink *, true>;
-using bSocketList = ListBaseWrapper<struct bNodeSocket *, true>;
+using bNodeList = IntrusiveListBaseWrapper<struct bNode>;
+using bLinkList = IntrusiveListBaseWrapper<struct bNodeLink>;
+using bSocketList = IntrusiveListBaseWrapper<struct bNodeSocket>;
class VirtualNode;
class VirtualSocket;
diff --git a/source/blender/blenkernel/intern/node_tree.cpp b/source/blender/blenkernel/intern/node_tree.cpp
index 7802a1c12db..f8ba5649dce 100644
--- a/source/blender/blenkernel/intern/node_tree.cpp
+++ b/source/blender/blenkernel/intern/node_tree.cpp
@@ -6,11 +6,11 @@ namespace BKE {
void VirtualNodeTree::add_all_of_tree(bNodeTree *btree)
{
Map<bNode *, VirtualNode *> node_mapping;
- for (bNode *bnode : BKE::bNodeList(btree->nodes)) {
+ for (bNode *bnode : bNodeList(btree->nodes)) {
VirtualNode *vnode = this->add_bnode(btree, bnode);
node_mapping.add_new(bnode, vnode);
}
- for (bNodeLink *blink : BKE::bLinkList(btree->links)) {
+ for (bNodeLink *blink : bLinkList(btree->links)) {
VirtualNode *from_vnode = node_mapping.lookup(blink->fromnode);
VirtualNode *to_vnode = node_mapping.lookup(blink->tonode);
VirtualSocket *from_vsocket = nullptr;
diff --git a/source/blender/blenlib/BLI_listbase_wrapper.hpp b/source/blender/blenlib/BLI_listbase_wrapper.hpp
index 650cb4246ac..bd3e5478cab 100644
--- a/source/blender/blenlib/BLI_listbase_wrapper.hpp
+++ b/source/blender/blenlib/BLI_listbase_wrapper.hpp
@@ -10,27 +10,27 @@
namespace BLI {
-template<typename T, bool intrusive> class ListBaseWrapper {
+template<typename T> class IntrusiveListBaseWrapper {
private:
ListBase *m_listbase;
public:
- ListBaseWrapper(ListBase *listbase) : m_listbase(listbase)
+ IntrusiveListBaseWrapper(ListBase *listbase) : m_listbase(listbase)
{
BLI_assert(listbase);
}
- ListBaseWrapper(ListBase &listbase) : m_listbase(&listbase)
+ IntrusiveListBaseWrapper(ListBase &listbase) : IntrusiveListBaseWrapper(&listbase)
{
}
class Iterator {
private:
ListBase *m_listbase;
- Link *m_current;
+ T *m_current;
public:
- Iterator(ListBase *listbase, Link *current) : m_listbase(listbase), m_current(current)
+ Iterator(ListBase *listbase, T *current) : m_listbase(listbase), m_current(current)
{
}
@@ -52,20 +52,15 @@ template<typename T, bool intrusive> class ListBaseWrapper {
return m_current != iterator.m_current;
}
- T operator*() const
+ T *operator*() const
{
- if (intrusive) {
- return (T)m_current;
- }
- else {
- return (T)((LinkData *)m_current)->data;
- }
+ return m_current;
}
};
Iterator begin() const
{
- return Iterator(m_listbase, (Link *)m_listbase->first);
+ return Iterator(m_listbase, (T *)m_listbase->first);
}
Iterator end() const
@@ -77,13 +72,7 @@ template<typename T, bool intrusive> class ListBaseWrapper {
{
void *ptr = BLI_findlink(m_listbase, index);
BLI_assert(ptr);
-
- if (intrusive) {
- return (T)ptr;
- }
- else {
- return (T)((LinkData *)ptr)->data;
- }
+ return (T *)ptr;
}
};
diff --git a/source/blender/blenlib/BLI_vector.hpp b/source/blender/blenlib/BLI_vector.hpp
index dcd5a407a92..45d01fe28ff 100644
--- a/source/blender/blenlib/BLI_vector.hpp
+++ b/source/blender/blenlib/BLI_vector.hpp
@@ -140,13 +140,9 @@ template<typename T, uint N = 4> class Vector {
*/
Vector(ListBase &values, bool intrusive_next_and_prev_pointers) : Vector()
{
+ BLI_assert(intrusive_next_and_prev_pointers);
if (intrusive_next_and_prev_pointers) {
- for (T value : ListBaseWrapper<T, true>(values)) {
- this->append(value);
- }
- }
- else {
- for (T value : ListBaseWrapper<T, false>(values)) {
+ for (T value : IntrusiveListBaseWrapper<typename std::remove_pointer<T>::type>(values)) {
this->append(value);
}
}
diff --git a/tests/gtests/blenlib/BLI_vector_test.cc b/tests/gtests/blenlib/BLI_vector_test.cc
index ce2aaeff54b..109c9c78e82 100644
--- a/tests/gtests/blenlib/BLI_vector_test.cc
+++ b/tests/gtests/blenlib/BLI_vector_test.cc
@@ -63,40 +63,31 @@ TEST(vector, MappedArrayRefConstructor)
EXPECT_TRUE(values.contains(6));
}
-TEST(vector, NonIntrusiveListBaseConstructor)
-{
- ListBase list = {0};
- BLI_addtail(&list, BLI_genericNodeN(POINTER_FROM_INT(42)));
- BLI_addtail(&list, BLI_genericNodeN(POINTER_FROM_INT(60)));
- BLI_addtail(&list, BLI_genericNodeN(POINTER_FROM_INT(90)));
- BLI::Vector<void *> vec(list, false);
- EXPECT_EQ(vec.size(), 3);
- EXPECT_EQ(POINTER_AS_INT(vec[0]), 42);
- EXPECT_EQ(POINTER_AS_INT(vec[1]), 60);
- EXPECT_EQ(POINTER_AS_INT(vec[2]), 90);
- BLI_freelistN(&list);
-}
-
struct TestListValue {
- TestListValue *prev, *next;
+ TestListValue *next, *prev;
int value;
};
TEST(vector, IntrusiveListBaseConstructor)
{
+ TestListValue *value1 = new TestListValue{0, 0, 4};
+ TestListValue *value2 = new TestListValue{0, 0, 5};
+ TestListValue *value3 = new TestListValue{0, 0, 6};
+
ListBase list = {0};
- BLI_addtail(&list, new TestListValue{0, 0, 4});
- BLI_addtail(&list, new TestListValue{0, 0, 6});
- BLI_addtail(&list, new TestListValue{0, 0, 7});
+ BLI_addtail(&list, value1);
+ BLI_addtail(&list, value2);
+ BLI_addtail(&list, value3);
Vector<TestListValue *> vec(list, true);
+
EXPECT_EQ(vec.size(), 3);
EXPECT_EQ(vec[0]->value, 4);
- EXPECT_EQ(vec[1]->value, 6);
- EXPECT_EQ(vec[2]->value, 7);
+ EXPECT_EQ(vec[1]->value, 5);
+ EXPECT_EQ(vec[2]->value, 6);
- delete vec[0];
- delete vec[1];
- delete vec[2];
+ delete value1;
+ delete value2;
+ delete value3;
}
TEST(vector, ContainerConstructor)
More information about the Bf-blender-cvs
mailing list