diff options
author | 2014-11-11 07:46:37 +0900 | |
---|---|---|
committer | 2014-11-11 15:06:48 +0900 | |
commit | 580420d21b5b2c40d662d22bc452c2bd4f74d664 (patch) | |
tree | aba61d2d80066550baec0a93a966db360c31e257 /native/jni/src/utils/int_array_view.h | |
parent | 0c1822df5bec37a71123118561fd3fb385404647 (diff) | |
download | latinime-580420d21b5b2c40d662d22bc452c2bd4f74d664.tar.gz latinime-580420d21b5b2c40d662d22bc452c2bd4f74d664.tar.xz latinime-580420d21b5b2c40d662d22bc452c2bd4f74d664.zip |
Implement IntArrayView::split for dicttoolkit.
Bug: 10059681
Change-Id: Ic29e79d049bb532727cf5cb1e529fec5d35156ed
Diffstat (limited to 'native/jni/src/utils/int_array_view.h')
-rw-r--r-- | native/jni/src/utils/int_array_view.h | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/native/jni/src/utils/int_array_view.h b/native/jni/src/utils/int_array_view.h index 408373176..e0f671056 100644 --- a/native/jni/src/utils/int_array_view.h +++ b/native/jni/src/utils/int_array_view.h @@ -133,6 +133,29 @@ class IntArrayView { return std::vector<int>(begin(), end()); } + std::vector<IntArrayView> split(const int separator, const int limit = S_INT_MAX) const { + if (limit <= 0) { + return std::vector<IntArrayView>(); + } + std::vector<IntArrayView> result; + if (limit == 1) { + result.emplace_back(mPtr, mSize); + return result; + } + size_t startIndex = 0; + for (size_t i = 0; i < mSize; ++i) { + if (mPtr[i] == separator) { + result.emplace_back(mPtr + startIndex, i - startIndex); + startIndex = i + 1; + if (result.size() >= static_cast<size_t>(limit - 1)) { + break; + } + } + } + result.emplace_back(mPtr + startIndex, mSize - startIndex); + return result; + } + private: DISALLOW_ASSIGNMENT_OPERATOR(IntArrayView); |