suggest.h revision 6c7ebc4023086fd61dcc19688663616c4781672a
172128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse/* 272128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse * Copyright (C) 2012 The Android Open Source Project 372128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse * 472128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse * Licensed under the Apache License, Version 2.0 (the "License"); 572128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse * you may not use this file except in compliance with the License. 672128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse * You may obtain a copy of the License at 772128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse * 872128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse * http://www.apache.org/licenses/LICENSE-2.0 972128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse * 1072128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse * Unless required by applicable law or agreed to in writing, software 1172128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse * distributed under the License is distributed on an "AS IS" BASIS, 1272128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1372128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse * See the License for the specific language governing permissions and 1472128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse * limitations under the License. 1572128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse */ 1672128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse 1772128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse#ifndef LATINIME_SUGGEST_IMPL_H 1872128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse#define LATINIME_SUGGEST_IMPL_H 1972128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse 2072128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse#include "defines.h" 2172128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse#include "suggest/core/suggest_interface.h" 2272128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse#include "suggest/core/policy/suggest_policy.h" 2372128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse 2472128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glissenamespace latinime { 2572128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse 2672128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisse// Naming convention 27843dfe3206c4f397c7911b748373dde5540392a4Cédric Cano// - Distance: "Weighted" edit distance -- used both for spatial and language. 28843dfe3206c4f397c7911b748373dde5540392a4Cédric Cano// - Compound Distance: Spatial Distance + Language Distance -- used for pruning and scoring 298fb7f1a8a4cbab5365491b4b41e50ff3f03306c8Kai Wasserbäch// - Cost: delta/diff for Distance -- used both for spatial and language 308fb7f1a8a4cbab5365491b4b41e50ff3f03306c8Kai Wasserbäch// - Length: "Non-weighted" -- used only for spatial 318fb7f1a8a4cbab5365491b4b41e50ff3f03306c8Kai Wasserbäch// - Probability: "Non-weighted" -- used only for language 328fb7f1a8a4cbab5365491b4b41e50ff3f03306c8Kai Wasserbäch// - Score: Final calibrated score based on the compound distance, which is sent to java as the 338fb7f1a8a4cbab5365491b4b41e50ff3f03306c8Kai Wasserbäch// priority of a suggested word 3402f8f134643f631364ca621fe0b6d6b72449e00cMarek Olšák 3502f8f134643f631364ca621fe0b6d6b72449e00cMarek Olšákclass DicNode; 369c284b5cae916a083d17d1039d2f2da128b47882Jerome Glisseclass DicTraverseSession; 379c284b5cae916a083d17d1039d2f2da128b47882Jerome Glisseclass ProximityInfo; 3872128962d640846472c1b0dc22cf4ac6ce875dc9Jerome Glisseclass Scoring; 39126e98966d5396ed251a34e3c39f11b36351a579Henri Verbeetclass Traversal; 40126e98966d5396ed251a34e3c39f11b36351a579Henri Verbeetclass Weighting; 41126e98966d5396ed251a34e3c39f11b36351a579Henri Verbeet 42f0b202ec73855bd9e1b29909c8ac90393043cb8bMarek Olšákclass Suggest : public SuggestInterface { 439f0dc855b274cb2591fc6896149f9a9cabcbcab5Marek Olšák public: 44126e98966d5396ed251a34e3c39f11b36351a579Henri Verbeet AK_FORCE_INLINE Suggest(const SuggestPolicy *const suggestPolicy) 456101b6d442b06a347c001fe85848d636ab7df260Marek Olšák : TRAVERSAL(suggestPolicy ? suggestPolicy->getTraversal() : nullptr), 46f0b202ec73855bd9e1b29909c8ac90393043cb8bMarek Olšák SCORING(suggestPolicy ? suggestPolicy->getScoring() : nullptr), 47126e98966d5396ed251a34e3c39f11b36351a579Henri Verbeet WEIGHTING(suggestPolicy ? suggestPolicy->getWeighting() : nullptr) {} 48126e98966d5396ed251a34e3c39f11b36351a579Henri Verbeet AK_FORCE_INLINE virtual ~Suggest() {} 49f0b202ec73855bd9e1b29909c8ac90393043cb8bMarek Olšák int getSuggestions(ProximityInfo *pInfo, void *traverseSession, int *inputXs, int *inputYs, 50f0b202ec73855bd9e1b29909c8ac90393043cb8bMarek Olšák int *times, int *pointerIds, int *inputCodePoints, int inputSize, int commitPoint, 51f0b202ec73855bd9e1b29909c8ac90393043cb8bMarek Olšák int *outWords, int *outputScores, int *outputIndices, int *outputTypes, 52f0b202ec73855bd9e1b29909c8ac90393043cb8bMarek Olšák int *outputAutoCommitFirstWordConfidence) const; 53f0b202ec73855bd9e1b29909c8ac90393043cb8bMarek Olšák 54f0b202ec73855bd9e1b29909c8ac90393043cb8bMarek Olšák private: 55e4340c1908a6a3b09e1a15d5195f6da7d00494d0Marek Olšák DISALLOW_IMPLICIT_CONSTRUCTORS(Suggest); 56f0b202ec73855bd9e1b29909c8ac90393043cb8bMarek Olšák void createNextWordDicNode(DicTraverseSession *traverseSession, DicNode *dicNode, 57f0b202ec73855bd9e1b29909c8ac90393043cb8bMarek Olšák const bool spaceSubstitution) const; 58f0b202ec73855bd9e1b29909c8ac90393043cb8bMarek Olšák void initializeSearch(DicTraverseSession *traverseSession, int commitPoint) const; 59f0b202ec73855bd9e1b29909c8ac90393043cb8bMarek Olšák void expandCurrentDicNodes(DicTraverseSession *traverseSession) const; 60f0b202ec73855bd9e1b29909c8ac90393043cb8bMarek Olšák void processTerminalDicNode(DicTraverseSession *traverseSession, DicNode *dicNode) const; 61f0b202ec73855bd9e1b29909c8ac90393043cb8bMarek Olšák void processExpandedDicNode(DicTraverseSession *traverseSession, DicNode *dicNode) const; 62f0b202ec73855bd9e1b29909c8ac90393043cb8bMarek Olšák void weightChildNode(DicTraverseSession *traverseSession, DicNode *dicNode) const; 63f0b202ec73855bd9e1b29909c8ac90393043cb8bMarek Olšák void processDicNodeAsOmission(DicTraverseSession *traverseSession, DicNode *dicNode) const; 64f0b202ec73855bd9e1b29909c8ac90393043cb8bMarek Olšák void processDicNodeAsDigraph(DicTraverseSession *traverseSession, DicNode *dicNode) const; 65f0b202ec73855bd9e1b29909c8ac90393043cb8bMarek Olšák void processDicNodeAsTransposition(DicTraverseSession *traverseSession, 66f0b202ec73855bd9e1b29909c8ac90393043cb8bMarek Olšák DicNode *dicNode) const; 67f0b202ec73855bd9e1b29909c8ac90393043cb8bMarek Olšák void processDicNodeAsInsertion(DicTraverseSession *traverseSession, DicNode *dicNode) const; 68f0b202ec73855bd9e1b29909c8ac90393043cb8bMarek Olšák void processDicNodeAsAdditionalProximityChar(DicTraverseSession *traverseSession, 69f0b202ec73855bd9e1b29909c8ac90393043cb8bMarek Olšák DicNode *dicNode, DicNode *childDicNode) const; 70f0b202ec73855bd9e1b29909c8ac90393043cb8bMarek Olšák void processDicNodeAsSubstitution(DicTraverseSession *traverseSession, DicNode *dicNode, 71f0b202ec73855bd9e1b29909c8ac90393043cb8bMarek Olšák DicNode *childDicNode) const; 72126e98966d5396ed251a34e3c39f11b36351a579Henri Verbeet void processDicNodeAsMatch(DicTraverseSession *traverseSession, 73126e98966d5396ed251a34e3c39f11b36351a579Henri Verbeet DicNode *childDicNode) const; 74126e98966d5396ed251a34e3c39f11b36351a579Henri Verbeet 759f0dc855b274cb2591fc6896149f9a9cabcbcab5Marek Olšák static const int MIN_CONTINUOUS_SUGGESTION_INPUT_SIZE; 76e4340c1908a6a3b09e1a15d5195f6da7d00494d0Marek Olšák 77126e98966d5396ed251a34e3c39f11b36351a579Henri Verbeet const Traversal *const TRAVERSAL; 78126e98966d5396ed251a34e3c39f11b36351a579Henri Verbeet const Scoring *const SCORING; 799f0dc855b274cb2591fc6896149f9a9cabcbcab5Marek Olšák const Weighting *const WEIGHTING; 809f0dc855b274cb2591fc6896149f9a9cabcbcab5Marek Olšák}; 81126e98966d5396ed251a34e3c39f11b36351a579Henri Verbeet} // namespace latinime 82e4340c1908a6a3b09e1a15d5195f6da7d00494d0Marek Olšák#endif // LATINIME_SUGGEST_IMPL_H 83126e98966d5396ed251a34e3c39f11b36351a579Henri Verbeet