• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2009 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef LATINIME_DICTIONARY_H
18 #define LATINIME_DICTIONARY_H
19 
20 #include <map>
21 
22 #include "bigram_dictionary.h"
23 #include "char_utils.h"
24 #include "correction.h"
25 #include "defines.h"
26 #include "proximity_info.h"
27 #include "unigram_dictionary.h"
28 #include "words_priority_queue_pool.h"
29 
30 namespace latinime {
31 
32 class Dictionary {
33  public:
34     Dictionary(void *dict, int dictSize, int mmapFd, int dictBufAdjust, int typedLetterMultipler,
35             int fullWordMultiplier, int maxWordLength, int maxWords);
36 
getSuggestions(ProximityInfo * proximityInfo,int * xcoordinates,int * ycoordinates,int * codes,int codesSize,const int32_t * prevWordChars,const int prevWordLength,bool useFullEditDistance,unsigned short * outWords,int * frequencies)37     int getSuggestions(ProximityInfo *proximityInfo, int *xcoordinates, int *ycoordinates,
38             int *codes, int codesSize, const int32_t* prevWordChars, const int prevWordLength,
39             bool useFullEditDistance, unsigned short *outWords, int *frequencies) {
40         std::map<int, int> bigramMap;
41         uint8_t bigramFilter[BIGRAM_FILTER_BYTE_SIZE];
42         mBigramDictionary->fillBigramAddressToFrequencyMapAndFilter(prevWordChars,
43                 prevWordLength, &bigramMap, bigramFilter);
44         return mUnigramDictionary->getSuggestions(proximityInfo, mWordsPriorityQueuePool,
45                 mCorrection, xcoordinates, ycoordinates, codes, codesSize, &bigramMap,
46                 bigramFilter, useFullEditDistance, outWords, frequencies);
47     }
48 
getBigrams(const int32_t * word,int length,int * codes,int codesSize,unsigned short * outWords,int * frequencies,int maxWordLength,int maxBigrams)49     int getBigrams(const int32_t *word, int length, int *codes, int codesSize,
50             unsigned short *outWords, int *frequencies, int maxWordLength, int maxBigrams) {
51         return mBigramDictionary->getBigrams(word, length, codes, codesSize, outWords, frequencies,
52                 maxWordLength, maxBigrams);
53     }
54 
55     int getFrequency(const int32_t *word, int length);
56     bool isValidBigram(const int32_t *word1, int length1, const int32_t *word2, int length2);
getDict()57     void *getDict() { return (void *)mDict; }
getDictSize()58     int getDictSize() { return mDictSize; }
getMmapFd()59     int getMmapFd() { return mMmapFd; }
getDictBufAdjust()60     int getDictBufAdjust() { return mDictBufAdjust; }
61     ~Dictionary();
62 
63     // public static utility methods
64     // static inline methods should be defined in the header file
65     static int wideStrLen(unsigned short *str);
66 
67  private:
68     const unsigned char *mDict;
69 
70     // Used only for the mmap version of dictionary loading, but we use these as dummy variables
71     // also for the malloc version.
72     const int mDictSize;
73     const int mMmapFd;
74     const int mDictBufAdjust;
75 
76     UnigramDictionary *mUnigramDictionary;
77     BigramDictionary *mBigramDictionary;
78     WordsPriorityQueuePool *mWordsPriorityQueuePool;
79     Correction *mCorrection;
80 };
81 
82 // public static utility methods
83 // static inline methods should be defined in the header file
wideStrLen(unsigned short * str)84 inline int Dictionary::wideStrLen(unsigned short *str) {
85     if (!str) return 0;
86     unsigned short *end = str;
87     while (*end)
88         end++;
89     return end - str;
90 }
91 } // namespace latinime
92 
93 #endif // LATINIME_DICTIONARY_H
94