diff --git a/native/jni/src/utils/int_array_view.h b/native/jni/src/utils/int_array_view.h index 8797b5944..c9c3b21d4 100644 --- a/native/jni/src/utils/int_array_view.h +++ b/native/jni/src/utils/int_array_view.h @@ -96,6 +96,13 @@ class IntArrayView { return IntArrayView(mPtr, std::min(maxSize, mSize)); } + const IntArrayView skip(const size_t n) const { + if (mSize <= n) { + return IntArrayView(); + } + return IntArrayView(mPtr + n, mSize - n); + } + 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 ecc451af0..161df2f43 100644 --- a/native/jni/tests/utils/int_array_view_test.cpp +++ b/native/jni/tests/utils/int_array_view_test.cpp @@ -72,5 +72,22 @@ TEST(IntArrayViewTest, TestLimit) { } } +TEST(IntArrayViewTest, TestSkip) { + const std::vector intVector = {3, 2, 1, 0, -1, -2}; + IntArrayView intArrayView(intVector); + + EXPECT_TRUE(intArrayView.skip(intVector.size()).empty()); + EXPECT_TRUE(intArrayView.skip(intVector.size() + 1).empty()); + EXPECT_EQ(intArrayView.size(), intArrayView.skip(0).size()); + EXPECT_EQ(intArrayView.size(), intArrayView.limit(1000).size()); + + static const size_t SKIP_COUNT = 2; + IntArrayView subView = intArrayView.skip(SKIP_COUNT); + EXPECT_EQ(intVector.size() - SKIP_COUNT, subView.size()); + for (size_t i = 0; i < subView.size(); ++i) { + EXPECT_EQ(intVector[i + SKIP_COUNT], subView[i]); + } +} + } // namespace } // namespace latinime