am 72d6061e: Merge "Use JniDataUtils::outputCodePoints() to output code points"
* commit '72d6061efbc025fbf5774aace80376a07b44bb7e': Use JniDataUtils::outputCodePoints() to output code pointsmain
commit
4d3253326e
|
@ -149,14 +149,16 @@ static void latinime_BinaryDictionary_getHeaderInfo(JNIEnv *env, jclass clazz, j
|
||||||
it != attributeMap->end(); ++it) {
|
it != attributeMap->end(); ++it) {
|
||||||
// Output key
|
// Output key
|
||||||
jintArray keyCodePointArray = env->NewIntArray(it->first.size());
|
jintArray keyCodePointArray = env->NewIntArray(it->first.size());
|
||||||
env->SetIntArrayRegion(
|
JniDataUtils::outputCodePoints(env, keyCodePointArray, 0 /* start */,
|
||||||
keyCodePointArray, 0 /* start */, it->first.size(), &it->first.at(0));
|
it->first.size(), it->first.data(), it->first.size(),
|
||||||
|
false /* needsNullTermination */);
|
||||||
env->CallBooleanMethod(outAttributeKeys, addMethodId, keyCodePointArray);
|
env->CallBooleanMethod(outAttributeKeys, addMethodId, keyCodePointArray);
|
||||||
env->DeleteLocalRef(keyCodePointArray);
|
env->DeleteLocalRef(keyCodePointArray);
|
||||||
// Output value
|
// Output value
|
||||||
jintArray valueCodePointArray = env->NewIntArray(it->second.size());
|
jintArray valueCodePointArray = env->NewIntArray(it->second.size());
|
||||||
env->SetIntArrayRegion(
|
JniDataUtils::outputCodePoints(env, valueCodePointArray, 0 /* start */,
|
||||||
valueCodePointArray, 0 /* start */, it->second.size(), &it->second.at(0));
|
it->second.size(), it->second.data(), it->second.size(),
|
||||||
|
false /* needsNullTermination */);
|
||||||
env->CallBooleanMethod(outAttributeValues, addMethodId, valueCodePointArray);
|
env->CallBooleanMethod(outAttributeValues, addMethodId, valueCodePointArray);
|
||||||
env->DeleteLocalRef(valueCodePointArray);
|
env->DeleteLocalRef(valueCodePointArray);
|
||||||
}
|
}
|
||||||
|
@ -301,6 +303,9 @@ static jint latinime_BinaryDictionary_getNextWord(JNIEnv *env, jclass clazz,
|
||||||
memset(wordCodePoints, 0, sizeof(wordCodePoints));
|
memset(wordCodePoints, 0, sizeof(wordCodePoints));
|
||||||
const int nextToken = dictionary->getNextWordAndNextToken(token, wordCodePoints);
|
const int nextToken = dictionary->getNextWordAndNextToken(token, wordCodePoints);
|
||||||
env->SetIntArrayRegion(outCodePoints, 0, outCodePointsLength, wordCodePoints);
|
env->SetIntArrayRegion(outCodePoints, 0, outCodePointsLength, wordCodePoints);
|
||||||
|
JniDataUtils::outputCodePoints(env, outCodePoints, 0 /* start */,
|
||||||
|
MAX_WORD_LENGTH /* maxLength */, wordCodePoints, outCodePointsLength,
|
||||||
|
false /* needsNullTermination */);
|
||||||
return nextToken;
|
return nextToken;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,14 +16,17 @@
|
||||||
|
|
||||||
#include "suggest/core/dictionary/property/word_property.h"
|
#include "suggest/core/dictionary/property/word_property.h"
|
||||||
|
|
||||||
|
#include "utils/jni_data_utils.h"
|
||||||
|
|
||||||
namespace latinime {
|
namespace latinime {
|
||||||
|
|
||||||
void WordProperty::outputProperties(JNIEnv *const env, jintArray outCodePoints,
|
void WordProperty::outputProperties(JNIEnv *const env, jintArray outCodePoints,
|
||||||
jbooleanArray outFlags, jintArray outProbabilityInfo, jobject outBigramTargets,
|
jbooleanArray outFlags, jintArray outProbabilityInfo, jobject outBigramTargets,
|
||||||
jobject outBigramProbabilities, jobject outShortcutTargets,
|
jobject outBigramProbabilities, jobject outShortcutTargets,
|
||||||
jobject outShortcutProbabilities) const {
|
jobject outShortcutProbabilities) const {
|
||||||
env->SetIntArrayRegion(outCodePoints, 0 /* start */, mCodePoints.size(), &mCodePoints[0]);
|
JniDataUtils::outputCodePoints(env, outCodePoints, 0 /* start */,
|
||||||
|
MAX_WORD_LENGTH /* maxLength */, mCodePoints.data(), mCodePoints.size(),
|
||||||
|
false /* needsNullTermination */);
|
||||||
jboolean flags[] = {mUnigramProperty.isNotAWord(), mUnigramProperty.isBlacklisted(),
|
jboolean flags[] = {mUnigramProperty.isNotAWord(), mUnigramProperty.isBlacklisted(),
|
||||||
!mBigrams.empty(), mUnigramProperty.hasShortcuts()};
|
!mBigrams.empty(), mUnigramProperty.hasShortcuts()};
|
||||||
env->SetBooleanArrayRegion(outFlags, 0 /* start */, NELEMS(flags), flags);
|
env->SetBooleanArrayRegion(outFlags, 0 /* start */, NELEMS(flags), flags);
|
||||||
|
@ -41,8 +44,9 @@ void WordProperty::outputProperties(JNIEnv *const env, jintArray outCodePoints,
|
||||||
for (const auto &bigramProperty : mBigrams) {
|
for (const auto &bigramProperty : mBigrams) {
|
||||||
const std::vector<int> *const word1CodePoints = bigramProperty.getTargetCodePoints();
|
const std::vector<int> *const word1CodePoints = bigramProperty.getTargetCodePoints();
|
||||||
jintArray bigramWord1CodePointArray = env->NewIntArray(word1CodePoints->size());
|
jintArray bigramWord1CodePointArray = env->NewIntArray(word1CodePoints->size());
|
||||||
env->SetIntArrayRegion(bigramWord1CodePointArray, 0 /* start */,
|
JniDataUtils::outputCodePoints(env, bigramWord1CodePointArray, 0 /* start */,
|
||||||
word1CodePoints->size(), word1CodePoints->data());
|
word1CodePoints->size(), word1CodePoints->data(), word1CodePoints->size(),
|
||||||
|
false /* needsNullTermination */);
|
||||||
env->CallBooleanMethod(outBigramTargets, addMethodId, bigramWord1CodePointArray);
|
env->CallBooleanMethod(outBigramTargets, addMethodId, bigramWord1CodePointArray);
|
||||||
env->DeleteLocalRef(bigramWord1CodePointArray);
|
env->DeleteLocalRef(bigramWord1CodePointArray);
|
||||||
|
|
||||||
|
@ -62,6 +66,9 @@ void WordProperty::outputProperties(JNIEnv *const env, jintArray outCodePoints,
|
||||||
jintArray shortcutTargetCodePointArray = env->NewIntArray(targetCodePoints->size());
|
jintArray shortcutTargetCodePointArray = env->NewIntArray(targetCodePoints->size());
|
||||||
env->SetIntArrayRegion(shortcutTargetCodePointArray, 0 /* start */,
|
env->SetIntArrayRegion(shortcutTargetCodePointArray, 0 /* start */,
|
||||||
targetCodePoints->size(), targetCodePoints->data());
|
targetCodePoints->size(), targetCodePoints->data());
|
||||||
|
JniDataUtils::outputCodePoints(env, shortcutTargetCodePointArray, 0 /* start */,
|
||||||
|
targetCodePoints->size(), targetCodePoints->data(), targetCodePoints->size(),
|
||||||
|
false /* needsNullTermination */);
|
||||||
env->CallBooleanMethod(outShortcutTargets, addMethodId, shortcutTargetCodePointArray);
|
env->CallBooleanMethod(outShortcutTargets, addMethodId, shortcutTargetCodePointArray);
|
||||||
env->DeleteLocalRef(shortcutTargetCodePointArray);
|
env->DeleteLocalRef(shortcutTargetCodePointArray);
|
||||||
jobject integerProbability = env->NewObject(integerClass, intToIntegerConstructorId,
|
jobject integerProbability = env->NewObject(integerClass, intToIntegerConstructorId,
|
||||||
|
|
|
@ -16,6 +16,8 @@
|
||||||
|
|
||||||
#include "suggest/core/result/suggestion_results.h"
|
#include "suggest/core/result/suggestion_results.h"
|
||||||
|
|
||||||
|
#include "utils/jni_data_utils.h"
|
||||||
|
|
||||||
namespace latinime {
|
namespace latinime {
|
||||||
|
|
||||||
void SuggestionResults::outputSuggestions(JNIEnv *env, jintArray outSuggestionCount,
|
void SuggestionResults::outputSuggestions(JNIEnv *env, jintArray outSuggestionCount,
|
||||||
|
@ -27,13 +29,9 @@ void SuggestionResults::outputSuggestions(JNIEnv *env, jintArray outSuggestionCo
|
||||||
const SuggestedWord &suggestedWord = mSuggestedWords.top();
|
const SuggestedWord &suggestedWord = mSuggestedWords.top();
|
||||||
suggestedWord.getCodePointCount();
|
suggestedWord.getCodePointCount();
|
||||||
const int start = outputIndex * MAX_WORD_LENGTH;
|
const int start = outputIndex * MAX_WORD_LENGTH;
|
||||||
env->SetIntArrayRegion(outputCodePointsArray, start, suggestedWord.getCodePointCount(),
|
JniDataUtils::outputCodePoints(env, outputCodePointsArray, start,
|
||||||
suggestedWord.getCodePoint());
|
MAX_WORD_LENGTH /* maxLength */, suggestedWord.getCodePoint(),
|
||||||
if (suggestedWord.getCodePointCount() < MAX_WORD_LENGTH) {
|
suggestedWord.getCodePointCount(), true /* needsNullTermination */);
|
||||||
const int terminal = 0;
|
|
||||||
env->SetIntArrayRegion(outputCodePointsArray, start + suggestedWord.getCodePointCount(),
|
|
||||||
1 /* len */, &terminal);
|
|
||||||
}
|
|
||||||
const int score = suggestedWord.getScore();
|
const int score = suggestedWord.getScore();
|
||||||
env->SetIntArrayRegion(outScoresArray, outputIndex, 1 /* len */, &score);
|
env->SetIntArrayRegion(outScoresArray, outputIndex, 1 /* len */, &score);
|
||||||
const int indexToPartialCommit = suggestedWord.getIndexToPartialCommit();
|
const int indexToPartialCommit = suggestedWord.getIndexToPartialCommit();
|
||||||
|
|
|
@ -65,6 +65,18 @@ class JniDataUtils {
|
||||||
return attributeMap;
|
return attributeMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void outputCodePoints(JNIEnv *env, jintArray intArrayToOutputCodePoints, const int start,
|
||||||
|
const int maxLength, const int *const codePoints, const int codePointCount,
|
||||||
|
const bool needsNullTermination) {
|
||||||
|
const int outputCodePointCount = std::min(maxLength, codePointCount);
|
||||||
|
env->SetIntArrayRegion(intArrayToOutputCodePoints, start, outputCodePointCount, codePoints);
|
||||||
|
if (needsNullTermination && outputCodePointCount < maxLength) {
|
||||||
|
const int terminal = 0;
|
||||||
|
env->SetIntArrayRegion(intArrayToOutputCodePoints, start + outputCodePointCount,
|
||||||
|
1 /* len */, &terminal);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
DISALLOW_IMPLICIT_CONSTRUCTORS(JniDataUtils);
|
DISALLOW_IMPLICIT_CONSTRUCTORS(JniDataUtils);
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue