Remove TerminalAttributes.
Use BinaryDictionaryShortcutIterator instead of TerminalAttributes. Bug: 6669677 Change-Id: Ib7176e3b302ba383344cc6fcc037e23568c702a8main
parent
f4688f8df0
commit
6abdafc671
|
@ -0,0 +1,55 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2012 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef LATINIME_BINARY_DICTIONARY_SHORTCUT_ITERATOR_H
|
||||||
|
#define LATINIME_BINARY_DICTIONARY_SHORTCUT_ITERATOR_H
|
||||||
|
|
||||||
|
#include "defines.h"
|
||||||
|
#include "suggest/core/policy/dictionary_shortcuts_structure_policy.h"
|
||||||
|
|
||||||
|
namespace latinime {
|
||||||
|
|
||||||
|
class BinaryDictionaryShortcutIterator {
|
||||||
|
public:
|
||||||
|
BinaryDictionaryShortcutIterator(
|
||||||
|
const DictionaryShortcutsStructurePolicy *const shortcutStructurePolicy,
|
||||||
|
const int shortcutPos)
|
||||||
|
: mShortcutStructurePolicy(shortcutStructurePolicy),
|
||||||
|
mPos(shortcutStructurePolicy->getStartPos(shortcutPos)),
|
||||||
|
mHasNextShortcutTarget(shortcutPos != NOT_A_DICT_POS) {}
|
||||||
|
|
||||||
|
AK_FORCE_INLINE bool hasNextShortcutTarget() const {
|
||||||
|
return mHasNextShortcutTarget;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Gets the shortcut target itself as an int string and put it to outTarget, put its length
|
||||||
|
// to outTargetLength, put whether it is whitelist to outIsWhitelist.
|
||||||
|
AK_FORCE_INLINE void nextShortcutTarget(
|
||||||
|
const int maxDepth, int *const outTarget, int *const outTargetLength,
|
||||||
|
bool *const outIsWhitelist) {
|
||||||
|
mShortcutStructurePolicy->getNextShortcut(maxDepth, outTarget, outTargetLength,
|
||||||
|
outIsWhitelist, &mHasNextShortcutTarget, &mPos);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
DISALLOW_IMPLICIT_CONSTRUCTORS(BinaryDictionaryShortcutIterator);
|
||||||
|
|
||||||
|
const DictionaryShortcutsStructurePolicy *const mShortcutStructurePolicy;
|
||||||
|
int mPos;
|
||||||
|
bool mHasNextShortcutTarget;
|
||||||
|
};
|
||||||
|
} // namespace latinime
|
||||||
|
#endif // LATINIME_BINARY_DICTIONARY_SHORTCUT_ITERATOR_H
|
|
@ -19,21 +19,20 @@
|
||||||
|
|
||||||
#include "defines.h"
|
#include "defines.h"
|
||||||
#include "suggest/core/dicnode/dic_node_utils.h"
|
#include "suggest/core/dicnode/dic_node_utils.h"
|
||||||
#include "suggest/core/dictionary/terminal_attributes.h"
|
#include "suggest/core/dictionary/binary_dictionary_shortcut_iterator.h"
|
||||||
|
|
||||||
namespace latinime {
|
namespace latinime {
|
||||||
|
|
||||||
class ShortcutUtils {
|
class ShortcutUtils {
|
||||||
public:
|
public:
|
||||||
static int outputShortcuts(const TerminalAttributes *const terminalAttributes,
|
static int outputShortcuts(BinaryDictionaryShortcutIterator *const shortcutIt,
|
||||||
int outputWordIndex, const int finalScore, int *const outputCodePoints,
|
int outputWordIndex, const int finalScore, int *const outputCodePoints,
|
||||||
int *const frequencies, int *const outputTypes, const bool sameAsTyped) {
|
int *const frequencies, int *const outputTypes, const bool sameAsTyped) {
|
||||||
TerminalAttributes::ShortcutIterator iterator = terminalAttributes->getShortcutIterator();
|
|
||||||
int shortcutTarget[MAX_WORD_LENGTH];
|
int shortcutTarget[MAX_WORD_LENGTH];
|
||||||
while (iterator.hasNextShortcutTarget() && outputWordIndex < MAX_RESULTS) {
|
while (shortcutIt->hasNextShortcutTarget() && outputWordIndex < MAX_RESULTS) {
|
||||||
bool isWhilelist;
|
bool isWhilelist;
|
||||||
int shortcutTargetStringLength;
|
int shortcutTargetStringLength;
|
||||||
iterator.nextShortcutTarget(MAX_WORD_LENGTH, shortcutTarget,
|
shortcutIt->nextShortcutTarget(MAX_WORD_LENGTH, shortcutTarget,
|
||||||
&shortcutTargetStringLength, &isWhilelist);
|
&shortcutTargetStringLength, &isWhilelist);
|
||||||
int shortcutScore;
|
int shortcutScore;
|
||||||
int kind;
|
int kind;
|
||||||
|
|
|
@ -1,80 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (C) 2012 The Android Open Source Project
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef LATINIME_TERMINAL_ATTRIBUTES_H
|
|
||||||
#define LATINIME_TERMINAL_ATTRIBUTES_H
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
#include "suggest/core/policy/dictionary_shortcuts_structure_policy.h"
|
|
||||||
|
|
||||||
namespace latinime {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This class encapsulates information about a terminal that allows to
|
|
||||||
* retrieve local node attributes like the list of shortcuts without
|
|
||||||
* exposing the format structure to the client.
|
|
||||||
*/
|
|
||||||
class TerminalAttributes {
|
|
||||||
public:
|
|
||||||
class ShortcutIterator {
|
|
||||||
public:
|
|
||||||
ShortcutIterator(const DictionaryShortcutsStructurePolicy *const shortcutStructurePolicy,
|
|
||||||
const int shortcutPos, const bool hasShortcutList)
|
|
||||||
: mShortcutStructurePolicy(shortcutStructurePolicy), mPos(shortcutPos),
|
|
||||||
mHasNextShortcutTarget(hasShortcutList) {}
|
|
||||||
|
|
||||||
inline bool hasNextShortcutTarget() const {
|
|
||||||
return mHasNextShortcutTarget;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Gets the shortcut target itself as an int string and put it to outTarget, put its length
|
|
||||||
// to outTargetLength, put whether it is whitelist to outIsWhitelist.
|
|
||||||
AK_FORCE_INLINE void nextShortcutTarget(
|
|
||||||
const int maxDepth, int *const outTarget, int *const outTargetLength,
|
|
||||||
bool *const outIsWhitelist) {
|
|
||||||
mShortcutStructurePolicy->getNextShortcut(maxDepth, outTarget, outTargetLength,
|
|
||||||
outIsWhitelist, &mHasNextShortcutTarget, &mPos);
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
const DictionaryShortcutsStructurePolicy *const mShortcutStructurePolicy;
|
|
||||||
int mPos;
|
|
||||||
bool mHasNextShortcutTarget;
|
|
||||||
};
|
|
||||||
|
|
||||||
TerminalAttributes(const DictionaryShortcutsStructurePolicy *const shortcutStructurePolicy,
|
|
||||||
const int shortcutPos)
|
|
||||||
: mShortcutStructurePolicy(shortcutStructurePolicy),
|
|
||||||
mShortcutListSizePos(shortcutPos) {}
|
|
||||||
|
|
||||||
inline ShortcutIterator getShortcutIterator() const {
|
|
||||||
int shortcutPos = mShortcutListSizePos;
|
|
||||||
const bool hasShortcutList = shortcutPos != NOT_A_DICT_POS;
|
|
||||||
if (hasShortcutList) {
|
|
||||||
shortcutPos = mShortcutStructurePolicy->getStartPos(shortcutPos);
|
|
||||||
}
|
|
||||||
// shortcutPos is never used if hasShortcutList is false.
|
|
||||||
return ShortcutIterator(mShortcutStructurePolicy, shortcutPos, hasShortcutList);
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
DISALLOW_IMPLICIT_CONSTRUCTORS(TerminalAttributes);
|
|
||||||
const DictionaryShortcutsStructurePolicy *const mShortcutStructurePolicy;
|
|
||||||
const int mShortcutListSizePos;
|
|
||||||
};
|
|
||||||
} // namespace latinime
|
|
||||||
#endif // LATINIME_TERMINAL_ATTRIBUTES_H
|
|
|
@ -21,10 +21,10 @@
|
||||||
#include "suggest/core/dicnode/dic_node_vector.h"
|
#include "suggest/core/dicnode/dic_node_vector.h"
|
||||||
// TODO: Use DictionaryStructurePolicy instead of BinaryDictionaryInfo.
|
// TODO: Use DictionaryStructurePolicy instead of BinaryDictionaryInfo.
|
||||||
#include "suggest/core/dictionary/binary_dictionary_info.h"
|
#include "suggest/core/dictionary/binary_dictionary_info.h"
|
||||||
|
#include "suggest/core/dictionary/binary_dictionary_shortcut_iterator.h"
|
||||||
#include "suggest/core/dictionary/dictionary.h"
|
#include "suggest/core/dictionary/dictionary.h"
|
||||||
#include "suggest/core/dictionary/digraph_utils.h"
|
#include "suggest/core/dictionary/digraph_utils.h"
|
||||||
#include "suggest/core/dictionary/shortcut_utils.h"
|
#include "suggest/core/dictionary/shortcut_utils.h"
|
||||||
#include "suggest/core/dictionary/terminal_attributes.h"
|
|
||||||
#include "suggest/core/layout/proximity_info.h"
|
#include "suggest/core/layout/proximity_info.h"
|
||||||
#include "suggest/core/policy/scoring.h"
|
#include "suggest/core/policy/scoring.h"
|
||||||
#include "suggest/core/policy/traversal.h"
|
#include "suggest/core/policy/traversal.h"
|
||||||
|
@ -214,13 +214,13 @@ int Suggest::outputSuggestions(DicTraverseSession *traverseSession, int *frequen
|
||||||
if (!terminalDicNode->hasMultipleWords()) {
|
if (!terminalDicNode->hasMultipleWords()) {
|
||||||
const DictionaryStructureWithBufferPolicy *const structurePolicy =
|
const DictionaryStructureWithBufferPolicy *const structurePolicy =
|
||||||
traverseSession->getBinaryDictionaryInfo()->getStructurePolicy();
|
traverseSession->getBinaryDictionaryInfo()->getStructurePolicy();
|
||||||
const TerminalAttributes terminalAttributes(
|
BinaryDictionaryShortcutIterator shortcutIt(
|
||||||
structurePolicy->getShortcutsStructurePolicy(),
|
structurePolicy->getShortcutsStructurePolicy(),
|
||||||
structurePolicy->getShortcutPositionOfNode(terminalDicNode->getPos()));
|
structurePolicy->getShortcutPositionOfNode(terminalDicNode->getPos()));
|
||||||
// Shortcut is not supported for multiple words suggestions.
|
// Shortcut is not supported for multiple words suggestions.
|
||||||
// TODO: Check shortcuts during traversal for multiple words suggestions.
|
// TODO: Check shortcuts during traversal for multiple words suggestions.
|
||||||
const bool sameAsTyped = TRAVERSAL->sameAsTyped(traverseSession, terminalDicNode);
|
const bool sameAsTyped = TRAVERSAL->sameAsTyped(traverseSession, terminalDicNode);
|
||||||
outputWordIndex = ShortcutUtils::outputShortcuts(&terminalAttributes, outputWordIndex,
|
outputWordIndex = ShortcutUtils::outputShortcuts(&shortcutIt, outputWordIndex,
|
||||||
finalScore, outputCodePoints, frequencies, outputTypes, sameAsTyped);
|
finalScore, outputCodePoints, frequencies, outputTypes, sameAsTyped);
|
||||||
}
|
}
|
||||||
DicNode::managedDelete(terminalDicNode);
|
DicNode::managedDelete(terminalDicNode);
|
||||||
|
|
Loading…
Reference in New Issue