1 /* 2 * Copyright (C) 2013 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_SHORTCUT_LIST_POLICY_H 18 #define LATINIME_SHORTCUT_LIST_POLICY_H 19 20 #include <cstdint> 21 22 #include "defines.h" 23 #include "dictionary/interface/dictionary_shortcuts_structure_policy.h" 24 #include "dictionary/structure/pt_common/shortcut/shortcut_list_reading_utils.h" 25 #include "utils/byte_array_view.h" 26 27 namespace latinime { 28 29 class ShortcutListPolicy : public DictionaryShortcutsStructurePolicy { 30 public: ShortcutListPolicy(const ReadOnlyByteArrayView buffer)31 explicit ShortcutListPolicy(const ReadOnlyByteArrayView buffer) : mBuffer(buffer) {} 32 ~ShortcutListPolicy()33 ~ShortcutListPolicy() {} 34 getStartPos(const int pos)35 int getStartPos(const int pos) const { 36 if (pos == NOT_A_DICT_POS) { 37 return NOT_A_DICT_POS; 38 } 39 int listPos = pos; 40 ShortcutListReadingUtils::getShortcutListSizeAndForwardPointer(mBuffer, &listPos); 41 return listPos; 42 } 43 getNextShortcut(const int maxCodePointCount,int * const outCodePoint,int * const outCodePointCount,bool * const outIsWhitelist,bool * const outHasNext,int * const pos)44 void getNextShortcut(const int maxCodePointCount, int *const outCodePoint, 45 int *const outCodePointCount, bool *const outIsWhitelist, bool *const outHasNext, 46 int *const pos) const { 47 const ShortcutListReadingUtils::ShortcutFlags flags = 48 ShortcutListReadingUtils::getFlagsAndForwardPointer(mBuffer, pos); 49 if (outHasNext) { 50 *outHasNext = ShortcutListReadingUtils::hasNext(flags); 51 } 52 if (outIsWhitelist) { 53 *outIsWhitelist = ShortcutListReadingUtils::isWhitelist(flags); 54 } 55 if (outCodePoint) { 56 *outCodePointCount = ShortcutListReadingUtils::readShortcutTarget( 57 mBuffer, maxCodePointCount, outCodePoint, pos); 58 } 59 } 60 skipAllShortcuts(int * const pos)61 void skipAllShortcuts(int *const pos) const { 62 const int shortcutListSize = ShortcutListReadingUtils 63 ::getShortcutListSizeAndForwardPointer(mBuffer, pos); 64 *pos += shortcutListSize; 65 } 66 67 private: 68 DISALLOW_IMPLICIT_CONSTRUCTORS(ShortcutListPolicy); 69 70 const ReadOnlyByteArrayView mBuffer; 71 }; 72 } // namespace latinime 73 #endif // LATINIME_SHORTCUT_LIST_POLICY_H 74