diff options
author | 2014-11-11 06:19:31 +0000 | |
---|---|---|
committer | 2014-11-11 06:19:31 +0000 | |
commit | a9ff7e971e1623c965cf3676d6f4486f4e69e4a4 (patch) | |
tree | aedc8cd95d88295f43aed07734aa17c539792f6f /native/jni/src/utils/int_array_view.h | |
parent | 57ddc316740fdb10b3ff377b18d53f063875b013 (diff) | |
parent | 7a3e6242103b7637171c6430bb9cca916583bfc0 (diff) | |
download | latinime-a9ff7e971e1623c965cf3676d6f4486f4e69e4a4.tar.gz latinime-a9ff7e971e1623c965cf3676d6f4486f4e69e4a4.tar.xz latinime-a9ff7e971e1623c965cf3676d6f4486f4e69e4a4.zip |
am 7a3e6242: Merge "Implement IntArrayView::split for dicttoolkit."
* commit '7a3e6242103b7637171c6430bb9cca916583bfc0':
Implement IntArrayView::split for dicttoolkit.
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); |