From 5f7f6a1615916d6f79bd240ead0715c417a68f44 Mon Sep 17 00:00:00 2001 From: Keisuke Kuroyanagi Date: Thu, 30 Jan 2014 17:10:23 +0900 Subject: [PATCH] Simplify UnigramProperty. Bug: 12810574 Change-Id: I606f559b5dd340b7525280ecead2c2c7ec920a78 --- .../core/dictionary/unigram_property.cpp | 2 +- .../core/dictionary/unigram_property.h | 31 +++++-------------- .../v4/ver4_patricia_trie_policy.cpp | 6 ++-- 3 files changed, 12 insertions(+), 27 deletions(-) diff --git a/native/jni/src/suggest/core/dictionary/unigram_property.cpp b/native/jni/src/suggest/core/dictionary/unigram_property.cpp index 16bbb69d8..be8a22a53 100644 --- a/native/jni/src/suggest/core/dictionary/unigram_property.cpp +++ b/native/jni/src/suggest/core/dictionary/unigram_property.cpp @@ -21,7 +21,7 @@ namespace latinime { void UnigramProperty::outputProperties(JNIEnv *const env, jintArray outCodePoints, jbooleanArray outFlags, jintArray outProbability, jintArray outHistoricalInfo, jobject outShortcutTargets, jobject outShortcutProbabilities) const { - env->SetIntArrayRegion(outCodePoints, 0 /* start */, mCodePointCount, mCodePoints); + env->SetIntArrayRegion(outCodePoints, 0 /* start */, mCodePoints.size(), &mCodePoints[0]); jboolean flags[] = {mIsNotAWord, mIsBlacklisted, mHasBigrams, mHasShortcuts}; env->SetBooleanArrayRegion(outFlags, 0 /* start */, NELEMS(flags), flags); env->SetIntArrayRegion(outProbability, 0 /* start */, 1 /* len */, &mProbability); diff --git a/native/jni/src/suggest/core/dictionary/unigram_property.h b/native/jni/src/suggest/core/dictionary/unigram_property.h index c4ebb86ab..4acde937b 100644 --- a/native/jni/src/suggest/core/dictionary/unigram_property.h +++ b/native/jni/src/suggest/core/dictionary/unigram_property.h @@ -30,36 +30,20 @@ class UnigramProperty { public: // Invalid unigram. UnigramProperty() - : mCodePoints(), mCodePointCount(0), mIsNotAWord(false), mIsBlacklisted(false), + : mCodePoints(), mIsNotAWord(false), mIsBlacklisted(false), mHasBigrams(false), mHasShortcuts(false), mProbability(NOT_A_PROBABILITY), mTimestamp(0), mLevel(0), mCount(0), mShortcutTargets(), mShortcutProbabilities() {} - UnigramProperty(const UnigramProperty &unigramProperty) - : mCodePoints(), mCodePointCount(unigramProperty.mCodePointCount), - mIsNotAWord(unigramProperty.mIsNotAWord), - mIsBlacklisted(unigramProperty.mIsBlacklisted), - mHasBigrams(unigramProperty.mHasBigrams), - mHasShortcuts(unigramProperty.mHasShortcuts), - mProbability(unigramProperty.mProbability), - mTimestamp(unigramProperty.mTimestamp), mLevel(unigramProperty.mLevel), - mCount(unigramProperty.mCount), mShortcutTargets(unigramProperty.mShortcutTargets), - mShortcutProbabilities(unigramProperty.mShortcutProbabilities) { - memcpy(mCodePoints, unigramProperty.mCodePoints, sizeof(mCodePoints)); - } - - UnigramProperty(const int *const codePoints, const int codePointCount, + UnigramProperty(const std::vector *const codePoints, const bool isNotAWord, const bool isBlacklisted, const bool hasBigrams, const bool hasShortcuts, const int probability, const int timestamp, const int level, const int count, const std::vector > *const shortcutTargets, const std::vector *const shortcutProbabilities) - : mCodePoints(), mCodePointCount(codePointCount), - mIsNotAWord(isNotAWord), mIsBlacklisted(isBlacklisted), mHasBigrams(hasBigrams), - mHasShortcuts(hasShortcuts), mProbability(probability), mTimestamp(timestamp), - mLevel(level), mCount(count), mShortcutTargets(*shortcutTargets), - mShortcutProbabilities(*shortcutProbabilities) { - memcpy(mCodePoints, codePoints, sizeof(mCodePoints)); - } + : mCodePoints(*codePoints), mIsNotAWord(isNotAWord), mIsBlacklisted(isBlacklisted), + mHasBigrams(hasBigrams), mHasShortcuts(hasShortcuts), mProbability(probability), + mTimestamp(timestamp), mLevel(level), mCount(count), + mShortcutTargets(*shortcutTargets), mShortcutProbabilities(*shortcutProbabilities) {} void outputProperties(JNIEnv *const env, jintArray outCodePoints, jbooleanArray outFlags, jintArray outProbability, jintArray outHistoricalInfo, jobject outShortcutTargets, @@ -68,8 +52,7 @@ class UnigramProperty { private: DISALLOW_ASSIGNMENT_OPERATOR(UnigramProperty); - int mCodePoints[MAX_WORD_LENGTH]; - int mCodePointCount; + std::vector mCodePoints; bool mIsNotAWord; bool mIsBlacklisted; bool mHasBigrams; diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_patricia_trie_policy.cpp b/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_patricia_trie_policy.cpp index b4730fe68..dee77c81b 100644 --- a/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_patricia_trie_policy.cpp +++ b/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_patricia_trie_policy.cpp @@ -326,6 +326,8 @@ const UnigramProperty Ver4PatriciaTriePolicy::getUnigramProperty(const int *cons return UnigramProperty(); } const PtNodeParams ptNodeParams = mNodeReader.fetchNodeInfoInBufferFromPtNodePos(ptNodePos); + std::vector codePointVector(ptNodeParams.getCodePoints(), + ptNodeParams.getCodePoints() + ptNodeParams.getCodePointCount()); const ProbabilityEntry probabilityEntry = mBuffers.get()->getProbabilityDictContent()->getProbabilityEntry( ptNodeParams.getTerminalId()); @@ -349,8 +351,8 @@ const UnigramProperty Ver4PatriciaTriePolicy::getUnigramProperty(const int *cons shortcutProbabilities.push_back(shortcutProbability); } } - return UnigramProperty(ptNodeParams.getCodePoints(), ptNodeParams.getCodePointCount(), - ptNodeParams.isNotAWord(), ptNodeParams.isBlacklisted(), ptNodeParams.hasBigrams(), + return UnigramProperty(&codePointVector, ptNodeParams.isNotAWord(), + ptNodeParams.isBlacklisted(), ptNodeParams.hasBigrams(), ptNodeParams.hasShortcutTargets(), ptNodeParams.getProbability(), historicalInfo->getTimeStamp(), historicalInfo->getLevel(), historicalInfo->getCount(), &shortcutTargets, &shortcutProbabilities);