am 7fe1244f: Merge "Implement Ver4PatriciaTriePolicy::getProperty."
* commit '7fe1244f31b106070b497ff44319578c6c749e54': Implement Ver4PatriciaTriePolicy::getProperty.main
commit
fcfce15a66
|
@ -343,7 +343,7 @@ static jstring latinime_BinaryDictionary_getProperty(JNIEnv *env, jclass clazz,
|
||||||
static const int GET_PROPERTY_RESULT_LENGTH = 100;
|
static const int GET_PROPERTY_RESULT_LENGTH = 100;
|
||||||
char resultChars[GET_PROPERTY_RESULT_LENGTH];
|
char resultChars[GET_PROPERTY_RESULT_LENGTH];
|
||||||
resultChars[0] = '\0';
|
resultChars[0] = '\0';
|
||||||
dictionary->getProperty(queryChars, resultChars, GET_PROPERTY_RESULT_LENGTH);
|
dictionary->getProperty(queryChars, queryUtf8Length, resultChars, GET_PROPERTY_RESULT_LENGTH);
|
||||||
return env->NewStringUTF(resultChars);
|
return env->NewStringUTF(resultChars);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -120,9 +120,10 @@ bool Dictionary::needsToRunGC(const bool mindsBlockByGC) {
|
||||||
return mDictionaryStructureWithBufferPolicy.get()->needsToRunGC(mindsBlockByGC);
|
return mDictionaryStructureWithBufferPolicy.get()->needsToRunGC(mindsBlockByGC);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Dictionary::getProperty(const char *const query, char *const outResult,
|
void Dictionary::getProperty(const char *const query, const int queryLength, char *const outResult,
|
||||||
const int maxResultLength) {
|
const int maxResultLength) {
|
||||||
return mDictionaryStructureWithBufferPolicy.get()->getProperty(query, outResult, maxResultLength);
|
return mDictionaryStructureWithBufferPolicy.get()->getProperty(query, queryLength, outResult,
|
||||||
|
maxResultLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Dictionary::logDictionaryInfo(JNIEnv *const env) const {
|
void Dictionary::logDictionaryInfo(JNIEnv *const env) const {
|
||||||
|
|
|
@ -85,7 +85,7 @@ class Dictionary {
|
||||||
|
|
||||||
bool needsToRunGC(const bool mindsBlockByGC);
|
bool needsToRunGC(const bool mindsBlockByGC);
|
||||||
|
|
||||||
void getProperty(const char *const query, char *const outResult,
|
void getProperty(const char *const query, const int queryLength, char *const outResult,
|
||||||
const int maxResultLength);
|
const int maxResultLength);
|
||||||
|
|
||||||
const DictionaryStructureWithBufferPolicy *getDictionaryStructurePolicy() const {
|
const DictionaryStructureWithBufferPolicy *getDictionaryStructurePolicy() const {
|
||||||
|
|
|
@ -85,7 +85,7 @@ class DictionaryStructureWithBufferPolicy {
|
||||||
|
|
||||||
// Currently, this method is used only for testing. You may want to consider creating new
|
// Currently, this method is used only for testing. You may want to consider creating new
|
||||||
// dedicated method instead of this if you want to use this in the production.
|
// dedicated method instead of this if you want to use this in the production.
|
||||||
virtual void getProperty(const char *const query, char *const outResult,
|
virtual void getProperty(const char *const query, const int queryLength, char *const outResult,
|
||||||
const int maxResultLength) = 0;
|
const int maxResultLength) = 0;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
|
@ -52,6 +52,9 @@ bool Ver4BigramListPolicy::addNewEntry(const int terminalId, const int newTarget
|
||||||
false /* hasNext */, newTargetTerminalId, &writingPos)) {
|
false /* hasNext */, newTargetTerminalId, &writingPos)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
if (outAddedNewEntry) {
|
||||||
|
*outAddedNewEntry = true;
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -112,7 +112,7 @@ class PatriciaTriePolicy : public DictionaryStructureWithBufferPolicy {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void getProperty(const char *const query, char *const outResult,
|
void getProperty(const char *const query, const int queryLength, char *const outResult,
|
||||||
const int maxResultLength) {
|
const int maxResultLength) {
|
||||||
// getProperty is not supported for this class.
|
// getProperty is not supported for this class.
|
||||||
if (maxResultLength > 0) {
|
if (maxResultLength > 0) {
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
|
|
||||||
namespace latinime {
|
namespace latinime {
|
||||||
|
|
||||||
// Note that these are corresponding definitions in Java side in BinaryDictionaryTests and
|
// Note that there are corresponding definitions in Java side in BinaryDictionaryTests and
|
||||||
// BinaryDictionaryDecayingTests.
|
// BinaryDictionaryDecayingTests.
|
||||||
const char *const DynamicPatriciaTriePolicy::UNIGRAM_COUNT_QUERY = "UNIGRAM_COUNT";
|
const char *const DynamicPatriciaTriePolicy::UNIGRAM_COUNT_QUERY = "UNIGRAM_COUNT";
|
||||||
const char *const DynamicPatriciaTriePolicy::BIGRAM_COUNT_QUERY = "BIGRAM_COUNT";
|
const char *const DynamicPatriciaTriePolicy::BIGRAM_COUNT_QUERY = "BIGRAM_COUNT";
|
||||||
|
@ -277,21 +277,22 @@ bool DynamicPatriciaTriePolicy::needsToRunGC(const bool mindsBlockByGC) const {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DynamicPatriciaTriePolicy::getProperty(const char *const query, char *const outResult,
|
void DynamicPatriciaTriePolicy::getProperty(const char *const query, const int queryLength,
|
||||||
const int maxResultLength) {
|
char *const outResult, const int maxResultLength) {
|
||||||
if (strncmp(query, UNIGRAM_COUNT_QUERY, maxResultLength) == 0) {
|
const int compareLength = queryLength + 1 /* terminator */;
|
||||||
|
if (strncmp(query, UNIGRAM_COUNT_QUERY, compareLength) == 0) {
|
||||||
snprintf(outResult, maxResultLength, "%d", mUnigramCount);
|
snprintf(outResult, maxResultLength, "%d", mUnigramCount);
|
||||||
} else if (strncmp(query, BIGRAM_COUNT_QUERY, maxResultLength) == 0) {
|
} else if (strncmp(query, BIGRAM_COUNT_QUERY, compareLength) == 0) {
|
||||||
snprintf(outResult, maxResultLength, "%d", mBigramCount);
|
snprintf(outResult, maxResultLength, "%d", mBigramCount);
|
||||||
} else if (strncmp(query, MAX_UNIGRAM_COUNT_QUERY, maxResultLength) == 0) {
|
} else if (strncmp(query, MAX_UNIGRAM_COUNT_QUERY, compareLength) == 0) {
|
||||||
snprintf(outResult, maxResultLength, "%d",
|
snprintf(outResult, maxResultLength, "%d",
|
||||||
mHeaderPolicy.isDecayingDict() ? ForgettingCurveUtils::MAX_UNIGRAM_COUNT :
|
mHeaderPolicy.isDecayingDict() ? ForgettingCurveUtils::MAX_UNIGRAM_COUNT :
|
||||||
static_cast<int>(DynamicPatriciaTrieWritingHelper::MAX_DICTIONARY_SIZE));
|
static_cast<int>(DynamicPatriciaTrieWritingHelper::MAX_DICTIONARY_SIZE));
|
||||||
} else if (strncmp(query, MAX_BIGRAM_COUNT_QUERY, maxResultLength) == 0) {
|
} else if (strncmp(query, MAX_BIGRAM_COUNT_QUERY, compareLength) == 0) {
|
||||||
snprintf(outResult, maxResultLength, "%d",
|
snprintf(outResult, maxResultLength, "%d",
|
||||||
mHeaderPolicy.isDecayingDict() ? ForgettingCurveUtils::MAX_BIGRAM_COUNT :
|
mHeaderPolicy.isDecayingDict() ? ForgettingCurveUtils::MAX_BIGRAM_COUNT :
|
||||||
static_cast<int>(DynamicPatriciaTrieWritingHelper::MAX_DICTIONARY_SIZE));
|
static_cast<int>(DynamicPatriciaTrieWritingHelper::MAX_DICTIONARY_SIZE));
|
||||||
} else if (strncmp(query, SET_NEEDS_TO_DECAY_FOR_TESTING_QUERY, maxResultLength) == 0) {
|
} else if (strncmp(query, SET_NEEDS_TO_DECAY_FOR_TESTING_QUERY, compareLength) == 0) {
|
||||||
mNeedsToDecayForTesting = true;
|
mNeedsToDecayForTesting = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -103,7 +103,7 @@ class DynamicPatriciaTriePolicy : public DictionaryStructureWithBufferPolicy {
|
||||||
|
|
||||||
bool needsToRunGC(const bool mindsBlockByGC) const;
|
bool needsToRunGC(const bool mindsBlockByGC) const;
|
||||||
|
|
||||||
void getProperty(const char *const query, char *const outResult,
|
void getProperty(const char *const query, const int queryLength, char *const outResult,
|
||||||
const int maxResultLength);
|
const int maxResultLength);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -25,6 +25,14 @@
|
||||||
|
|
||||||
namespace latinime {
|
namespace latinime {
|
||||||
|
|
||||||
|
// Note that there are corresponding definitions in Java side in BinaryDictionaryTests and
|
||||||
|
// BinaryDictionaryDecayingTests.
|
||||||
|
const char *const Ver4PatriciaTriePolicy::UNIGRAM_COUNT_QUERY = "UNIGRAM_COUNT";
|
||||||
|
const char *const Ver4PatriciaTriePolicy::BIGRAM_COUNT_QUERY = "BIGRAM_COUNT";
|
||||||
|
const char *const Ver4PatriciaTriePolicy::MAX_UNIGRAM_COUNT_QUERY = "MAX_UNIGRAM_COUNT";
|
||||||
|
const char *const Ver4PatriciaTriePolicy::MAX_BIGRAM_COUNT_QUERY = "MAX_BIGRAM_COUNT";
|
||||||
|
const char *const Ver4PatriciaTriePolicy::SET_NEEDS_TO_DECAY_FOR_TESTING_QUERY =
|
||||||
|
"SET_NEEDS_TO_DECAY_FOR_TESTING";
|
||||||
const int Ver4PatriciaTriePolicy::MARGIN_TO_REFUSE_DYNAMIC_OPERATIONS = 1024;
|
const int Ver4PatriciaTriePolicy::MARGIN_TO_REFUSE_DYNAMIC_OPERATIONS = 1024;
|
||||||
const int Ver4PatriciaTriePolicy::MIN_DICT_SIZE_TO_REFUSE_DYNAMIC_OPERATIONS =
|
const int Ver4PatriciaTriePolicy::MIN_DICT_SIZE_TO_REFUSE_DYNAMIC_OPERATIONS =
|
||||||
Ver4DictConstants::MAX_DICTIONARY_SIZE - MARGIN_TO_REFUSE_DYNAMIC_OPERATIONS;
|
Ver4DictConstants::MAX_DICTIONARY_SIZE - MARGIN_TO_REFUSE_DYNAMIC_OPERATIONS;
|
||||||
|
@ -257,9 +265,24 @@ bool Ver4PatriciaTriePolicy::needsToRunGC(const bool mindsBlockByGC) const {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Ver4PatriciaTriePolicy::getProperty(const char *const query, char *const outResult,
|
void Ver4PatriciaTriePolicy::getProperty(const char *const query, const int queryLength,
|
||||||
const int maxResultLength) {
|
char *const outResult, const int maxResultLength) {
|
||||||
// TODO: Implement.
|
const int compareLength = queryLength + 1 /* terminator */;
|
||||||
|
if (strncmp(query, UNIGRAM_COUNT_QUERY, compareLength) == 0) {
|
||||||
|
snprintf(outResult, maxResultLength, "%d", mUnigramCount);
|
||||||
|
} else if (strncmp(query, BIGRAM_COUNT_QUERY, compareLength) == 0) {
|
||||||
|
snprintf(outResult, maxResultLength, "%d", mBigramCount);
|
||||||
|
} else if (strncmp(query, MAX_UNIGRAM_COUNT_QUERY, compareLength) == 0) {
|
||||||
|
snprintf(outResult, maxResultLength, "%d",
|
||||||
|
mHeaderPolicy.isDecayingDict() ? ForgettingCurveUtils::MAX_UNIGRAM_COUNT :
|
||||||
|
static_cast<int>(Ver4DictConstants::MAX_DICTIONARY_SIZE));
|
||||||
|
} else if (strncmp(query, MAX_BIGRAM_COUNT_QUERY, compareLength) == 0) {
|
||||||
|
snprintf(outResult, maxResultLength, "%d",
|
||||||
|
mHeaderPolicy.isDecayingDict() ? ForgettingCurveUtils::MAX_BIGRAM_COUNT :
|
||||||
|
static_cast<int>(Ver4DictConstants::MAX_DICTIONARY_SIZE));
|
||||||
|
} else if (strncmp(query, SET_NEEDS_TO_DECAY_FOR_TESTING_QUERY, compareLength) == 0) {
|
||||||
|
mNeedsToDecayForTesting = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace latinime
|
} // namespace latinime
|
||||||
|
|
|
@ -103,12 +103,17 @@ class Ver4PatriciaTriePolicy : public DictionaryStructureWithBufferPolicy {
|
||||||
|
|
||||||
bool needsToRunGC(const bool mindsBlockByGC) const;
|
bool needsToRunGC(const bool mindsBlockByGC) const;
|
||||||
|
|
||||||
void getProperty(const char *const query, char *const outResult,
|
void getProperty(const char *const query, const int queryLength, char *const outResult,
|
||||||
const int maxResultLength);
|
const int maxResultLength);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
DISALLOW_IMPLICIT_CONSTRUCTORS(Ver4PatriciaTriePolicy);
|
DISALLOW_IMPLICIT_CONSTRUCTORS(Ver4PatriciaTriePolicy);
|
||||||
|
|
||||||
|
static const char *const UNIGRAM_COUNT_QUERY;
|
||||||
|
static const char *const BIGRAM_COUNT_QUERY;
|
||||||
|
static const char *const MAX_UNIGRAM_COUNT_QUERY;
|
||||||
|
static const char *const MAX_BIGRAM_COUNT_QUERY;
|
||||||
|
static const char *const SET_NEEDS_TO_DECAY_FOR_TESTING_QUERY;
|
||||||
// When the dictionary size is near the maximum size, we have to refuse dynamic operations to
|
// When the dictionary size is near the maximum size, we have to refuse dynamic operations to
|
||||||
// prevent the dictionary from overflowing.
|
// prevent the dictionary from overflowing.
|
||||||
static const int MARGIN_TO_REFUSE_DYNAMIC_OPERATIONS;
|
static const int MARGIN_TO_REFUSE_DYNAMIC_OPERATIONS;
|
||||||
|
|
Loading…
Reference in New Issue