aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--native/jni/src/utils/int_array_view.h7
-rw-r--r--native/jni/tests/utils/int_array_view_test.cpp17
2 files changed, 24 insertions, 0 deletions
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<int> 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