From a3b0eb168567c2650b024366f95f6b9b0ff1c811 Mon Sep 17 00:00:00 2001 From: Keisuke Kuroyanagi Date: Thu, 11 Sep 2014 15:21:52 +0900 Subject: [PATCH] Implement IntArrayView.copyToBuffer(). Bug: 14425059 Change-Id: Ic1b7de72701eae0c0b1bb28d12514099446a66a9 --- native/jni/src/utils/int_array_view.h | 9 +++++++- .../jni/tests/utils/int_array_view_test.cpp | 22 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/native/jni/src/utils/int_array_view.h b/native/jni/src/utils/int_array_view.h index 08256bdef..c39add9fe 100644 --- a/native/jni/src/utils/int_array_view.h +++ b/native/jni/src/utils/int_array_view.h @@ -17,8 +17,9 @@ #ifndef LATINIME_INT_ARRAY_VIEW_H #define LATINIME_INT_ARRAY_VIEW_H +#include #include -#include +#include #include #include "defines.h" @@ -103,6 +104,12 @@ class IntArrayView { return IntArrayView(mPtr + n, mSize - n); } + template + void copyToArray(std::array *const buffer, const size_t offset) const { + ASSERT(mSize + offset <= N); + memmove(buffer->data() + offset, mPtr, sizeof(int) * mSize); + } + private: DISALLOW_ASSIGNMENT_OPERATOR(IntArrayView); diff --git a/native/jni/tests/utils/int_array_view_test.cpp b/native/jni/tests/utils/int_array_view_test.cpp index 93bad5822..ec57cf59c 100644 --- a/native/jni/tests/utils/int_array_view_test.cpp +++ b/native/jni/tests/utils/int_array_view_test.cpp @@ -18,6 +18,7 @@ #include +#include #include namespace latinime { @@ -89,5 +90,26 @@ TEST(IntArrayViewTest, TestSkip) { } } +TEST(IntArrayViewTest, TestCopyToArray) { + // "{{" to suppress warning. + std::array buffer = {{10, 20, 30, 40, 50, 60, 70}}; + const std::vector intVector = {3, 2, 1, 0, -1, -2}; + IntArrayView intArrayView(intVector); + intArrayView.limit(0).copyToArray(&buffer, 0); + EXPECT_EQ(10, buffer[0]); + EXPECT_EQ(20, buffer[1]); + intArrayView.limit(1).copyToArray(&buffer, 0); + EXPECT_EQ(intVector[0], buffer[0]); + EXPECT_EQ(20, buffer[1]); + intArrayView.limit(1).copyToArray(&buffer, 1); + EXPECT_EQ(intVector[0], buffer[0]); + EXPECT_EQ(intVector[0], buffer[1]); + intArrayView.copyToArray(&buffer, 0); + for (size_t i = 0; i < intArrayView.size(); ++i) { + EXPECT_EQ(intVector[i], buffer[i]); + } + EXPECT_EQ(70, buffer[6]); +} + } // namespace } // namespace latinime