[Bf-blender-cvs] [a19584a4715] master: BLI: fix constructor regression for Vector and Array
Jacques Lucke
noreply at git.blender.org
Mon Jul 13 10:51:55 CEST 2020
Commit: a19584a4715444721f8f625f0b5481e67c0d97ae
Author: Jacques Lucke
Date: Mon Jul 13 10:51:46 2020 +0200
Branches: master
https://developer.blender.org/rBa19584a4715444721f8f625f0b5481e67c0d97ae
BLI: fix constructor regression for Vector and Array
This was introduced in rB403384998a6bb5f428e15ced5.
===================================================================
M source/blender/blenlib/BLI_array.hh
M source/blender/blenlib/BLI_vector.hh
M tests/gtests/blenlib/BLI_span_test.cc
M tests/gtests/blenlib/BLI_vector_test.cc
M tests/gtests/functions/FN_attributes_ref_test.cc
M tests/gtests/functions/FN_multi_function_test.cc
===================================================================
diff --git a/source/blender/blenlib/BLI_array.hh b/source/blender/blenlib/BLI_array.hh
index c7a9c49c972..c411fc50f15 100644
--- a/source/blender/blenlib/BLI_array.hh
+++ b/source/blender/blenlib/BLI_array.hh
@@ -105,6 +105,10 @@ class Array {
{
}
+ Array(const std::initializer_list<T> &values) : Array(Span<T>(values))
+ {
+ }
+
/**
* Create a new array with the given size. All values will be default constructed. For trivial
* types like int, default construction does nothing.
diff --git a/source/blender/blenlib/BLI_vector.hh b/source/blender/blenlib/BLI_vector.hh
index df885588d9b..1fe38464ad0 100644
--- a/source/blender/blenlib/BLI_vector.hh
+++ b/source/blender/blenlib/BLI_vector.hh
@@ -167,6 +167,10 @@ class Vector {
{
}
+ Vector(const std::initializer_list<T> &values) : Vector(Span<T>(values))
+ {
+ }
+
template<typename U,
size_t N,
typename std::enable_if_t<std::is_convertible_v<U, T>> * = nullptr>
diff --git a/tests/gtests/blenlib/BLI_span_test.cc b/tests/gtests/blenlib/BLI_span_test.cc
index ed3cce6d2cf..cb1a8b9b6f9 100644
--- a/tests/gtests/blenlib/BLI_span_test.cc
+++ b/tests/gtests/blenlib/BLI_span_test.cc
@@ -285,4 +285,14 @@ TEST(span, CastLargerSize)
EXPECT_EQ(new_a_span.size(), 2u);
}
+TEST(span, VoidPointerSpan)
+{
+ int a;
+ float b;
+ double c;
+
+ auto func1 = [](Span<void *> span) { EXPECT_EQ(span.size(), 3); };
+ func1({&a, &b, &c});
+}
+
} // namespace blender
diff --git a/tests/gtests/blenlib/BLI_vector_test.cc b/tests/gtests/blenlib/BLI_vector_test.cc
index 92fb12fb4e5..a020611aed6 100644
--- a/tests/gtests/blenlib/BLI_vector_test.cc
+++ b/tests/gtests/blenlib/BLI_vector_test.cc
@@ -651,4 +651,13 @@ TEST(vector, OveralignedValues)
}
}
+TEST(vector, ConstructVoidPointerVector)
+{
+ int a;
+ float b;
+ double c;
+ Vector<void *> vec = {&a, &b, &c};
+ EXPECT_EQ(vec.size(), 3);
+}
+
} // namespace blender
diff --git a/tests/gtests/functions/FN_attributes_ref_test.cc b/tests/gtests/functions/FN_attributes_ref_test.cc
index fee8c5dc058..1c05bb930db 100644
--- a/tests/gtests/functions/FN_attributes_ref_test.cc
+++ b/tests/gtests/functions/FN_attributes_ref_test.cc
@@ -65,8 +65,7 @@ TEST(mutable_attributes_ref, ComplexTest)
Array<float> sizes(amount);
Array<std::string> names(amount);
- Array<void *> buffers = {
- (void *)positions.data(), (void *)ids.data(), (void *)sizes.data(), (void *)names.data()};
+ Array<void *> buffers = {positions.data(), ids.data(), sizes.data(), names.data()};
MutableAttributesRef attributes{info, buffers, IndexRange(1, 3)};
EXPECT_EQ(attributes.size(), 3);
EXPECT_EQ(attributes.info().size(), 4);
diff --git a/tests/gtests/functions/FN_multi_function_test.cc b/tests/gtests/functions/FN_multi_function_test.cc
index 2544f1c63b0..8cc8f91a300 100644
--- a/tests/gtests/functions/FN_multi_function_test.cc
+++ b/tests/gtests/functions/FN_multi_function_test.cc
@@ -369,7 +369,7 @@ TEST(multi_function, CustomMF_Convert)
CustomMF_Convert<float, int> fn;
Array<float> inputs = {5.4f, 7.1f, 9.0f};
- Array<int> outputs{inputs.size(), 0};
+ Array<int> outputs(inputs.size(), 0);
MFParamsBuilder params(fn, inputs.size());
params.add_readonly_single_input(inputs.as_span());
More information about the Bf-blender-cvs
mailing list