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