[Bf-blender-cvs] [8dd4082b27e] functions: easy access of first and last element in array ref
Jacques Lucke
noreply at git.blender.org
Sat Jun 29 16:25:56 CEST 2019
Commit: 8dd4082b27e8f39a7c9c823f6f8ba97da29aab65
Author: Jacques Lucke
Date: Sat Jun 29 15:36:13 2019 +0200
Branches: functions
https://developer.blender.org/rB8dd4082b27e8f39a7c9c823f6f8ba97da29aab65
easy access of first and last element in array ref
===================================================================
M source/blender/blenlib/BLI_array_ref.hpp
M tests/gtests/blenlib/BLI_array_ref_test.cc
===================================================================
diff --git a/source/blender/blenlib/BLI_array_ref.hpp b/source/blender/blenlib/BLI_array_ref.hpp
index 1cfd2cfdac7..b41c2e78782 100644
--- a/source/blender/blenlib/BLI_array_ref.hpp
+++ b/source/blender/blenlib/BLI_array_ref.hpp
@@ -210,6 +210,26 @@ template<typename T> class ArrayRef {
}
return counter;
}
+
+ /**
+ * Return a reference to the first element in the array.
+ * Asserts when the array is empty.
+ */
+ T &first()
+ {
+ BLI_assert(m_size > 0);
+ return m_start[0];
+ }
+
+ /**
+ * Return a reference to the last elemeent in the array.
+ * Asserts when the array is empty.
+ */
+ T &last()
+ {
+ BLI_assert(m_size > 0);
+ return m_start[m_size - 1];
+ }
};
template<typename ArrayT, typename ValueT, ValueT (*GetValue)(ArrayT &item)> class MappedArrayRef {
diff --git a/tests/gtests/blenlib/BLI_array_ref_test.cc b/tests/gtests/blenlib/BLI_array_ref_test.cc
index af4c31c6018..b73dd60fd3f 100644
--- a/tests/gtests/blenlib/BLI_array_ref_test.cc
+++ b/tests/gtests/blenlib/BLI_array_ref_test.cc
@@ -211,3 +211,19 @@ TEST(array_ref, CopyTo)
EXPECT_EQ(b[1], 6);
EXPECT_EQ(b[2], 7);
}
+
+TEST(array_ref, FirstLast)
+{
+ std::array<int, 4> a = {6, 7, 8, 9};
+ IntArrayRef a_ref(a);
+ EXPECT_EQ(a_ref.first(), 6);
+ EXPECT_EQ(a_ref.last(), 9);
+}
+
+TEST(array_ref, FirstLast_OneElement)
+{
+ int a = 3;
+ IntArrayRef a_ref(a);
+ EXPECT_EQ(a_ref.first(), 3);
+ EXPECT_EQ(a_ref.last(), 3);
+}
More information about the Bf-blender-cvs
mailing list