Preparatory refactoring
Split out getting the pointer to the bigrams to a separate function. This is a preparative change to bug#6313806 Change-Id: Ieb2e306a1151cd95dc1a16793c8dc2f7fed8b654main
parent
473a3dd669
commit
9c2a96aa6c
|
@ -108,19 +108,7 @@ int BigramDictionary::getBigrams(unsigned short *prevWord, int prevWordLength, i
|
||||||
mMaxBigrams = maxBigrams;
|
mMaxBigrams = maxBigrams;
|
||||||
|
|
||||||
const uint8_t* const root = DICT;
|
const uint8_t* const root = DICT;
|
||||||
int pos = BinaryFormat::getTerminalPosition(root, prevWord, prevWordLength);
|
int pos = getBigramListForWord(root, prevWord, prevWordLength);
|
||||||
|
|
||||||
if (NOT_VALID_WORD == pos) return 0;
|
|
||||||
const int flags = BinaryFormat::getFlagsAndForwardPointer(root, &pos);
|
|
||||||
if (0 == (flags & UnigramDictionary::FLAG_HAS_BIGRAMS)) return 0;
|
|
||||||
if (0 == (flags & UnigramDictionary::FLAG_HAS_MULTIPLE_CHARS)) {
|
|
||||||
BinaryFormat::getCharCodeAndForwardPointer(root, &pos);
|
|
||||||
} else {
|
|
||||||
pos = BinaryFormat::skipOtherCharacters(root, pos);
|
|
||||||
}
|
|
||||||
pos = BinaryFormat::skipChildrenPosition(flags, pos);
|
|
||||||
pos = BinaryFormat::skipFrequency(flags, pos);
|
|
||||||
pos = BinaryFormat::skipShortcuts(root, flags, pos);
|
|
||||||
int bigramFlags;
|
int bigramFlags;
|
||||||
int bigramCount = 0;
|
int bigramCount = 0;
|
||||||
do {
|
do {
|
||||||
|
@ -142,6 +130,24 @@ int BigramDictionary::getBigrams(unsigned short *prevWord, int prevWordLength, i
|
||||||
return bigramCount;
|
return bigramCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int BigramDictionary::getBigramListForWord(const uint8_t* const root,
|
||||||
|
const unsigned short *prevWord, const int prevWordLength) {
|
||||||
|
int pos = BinaryFormat::getTerminalPosition(root, prevWord, prevWordLength);
|
||||||
|
|
||||||
|
if (NOT_VALID_WORD == pos) return 0;
|
||||||
|
const int flags = BinaryFormat::getFlagsAndForwardPointer(root, &pos);
|
||||||
|
if (0 == (flags & UnigramDictionary::FLAG_HAS_BIGRAMS)) return 0;
|
||||||
|
if (0 == (flags & UnigramDictionary::FLAG_HAS_MULTIPLE_CHARS)) {
|
||||||
|
BinaryFormat::getCharCodeAndForwardPointer(root, &pos);
|
||||||
|
} else {
|
||||||
|
pos = BinaryFormat::skipOtherCharacters(root, pos);
|
||||||
|
}
|
||||||
|
pos = BinaryFormat::skipChildrenPosition(flags, pos);
|
||||||
|
pos = BinaryFormat::skipFrequency(flags, pos);
|
||||||
|
pos = BinaryFormat::skipShortcuts(root, flags, pos);
|
||||||
|
return pos;
|
||||||
|
}
|
||||||
|
|
||||||
bool BigramDictionary::checkFirstCharacter(unsigned short *word) {
|
bool BigramDictionary::checkFirstCharacter(unsigned short *word) {
|
||||||
// Checks whether this word starts with same character or neighboring characters of
|
// Checks whether this word starts with same character or neighboring characters of
|
||||||
// what user typed.
|
// what user typed.
|
||||||
|
|
|
@ -17,6 +17,8 @@
|
||||||
#ifndef LATINIME_BIGRAM_DICTIONARY_H
|
#ifndef LATINIME_BIGRAM_DICTIONARY_H
|
||||||
#define LATINIME_BIGRAM_DICTIONARY_H
|
#define LATINIME_BIGRAM_DICTIONARY_H
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
namespace latinime {
|
namespace latinime {
|
||||||
|
|
||||||
class Dictionary;
|
class Dictionary;
|
||||||
|
@ -25,6 +27,8 @@ class BigramDictionary {
|
||||||
BigramDictionary(const unsigned char *dict, int maxWordLength, Dictionary *parentDictionary);
|
BigramDictionary(const unsigned char *dict, int maxWordLength, Dictionary *parentDictionary);
|
||||||
int getBigrams(unsigned short *word, int length, int *codes, int codesSize,
|
int getBigrams(unsigned short *word, int length, int *codes, int codesSize,
|
||||||
unsigned short *outWords, int *frequencies, int maxWordLength, int maxBigrams);
|
unsigned short *outWords, int *frequencies, int maxWordLength, int maxBigrams);
|
||||||
|
int getBigramListForWord(const uint8_t* const root,
|
||||||
|
const unsigned short *prevWord, const int prevWordLength);
|
||||||
~BigramDictionary();
|
~BigramDictionary();
|
||||||
private:
|
private:
|
||||||
bool addWordBigram(unsigned short *word, int length, int frequency);
|
bool addWordBigram(unsigned short *word, int length, int frequency);
|
||||||
|
|
Loading…
Reference in New Issue