1a71ed8caa27c4a0174f25750171282980bc26880Keisuke Kuroynagi/* 2a71ed8caa27c4a0174f25750171282980bc26880Keisuke Kuroynagi * Copyright (C) 2013 The Android Open Source Project 3a71ed8caa27c4a0174f25750171282980bc26880Keisuke Kuroynagi * 4a71ed8caa27c4a0174f25750171282980bc26880Keisuke Kuroynagi * Licensed under the Apache License, Version 2.0 (the "License"); 5a71ed8caa27c4a0174f25750171282980bc26880Keisuke Kuroynagi * you may not use this file except in compliance with the License. 6a71ed8caa27c4a0174f25750171282980bc26880Keisuke Kuroynagi * You may obtain a copy of the License at 7a71ed8caa27c4a0174f25750171282980bc26880Keisuke Kuroynagi * 8a71ed8caa27c4a0174f25750171282980bc26880Keisuke Kuroynagi * http://www.apache.org/licenses/LICENSE-2.0 9a71ed8caa27c4a0174f25750171282980bc26880Keisuke Kuroynagi * 10a71ed8caa27c4a0174f25750171282980bc26880Keisuke Kuroynagi * Unless required by applicable law or agreed to in writing, software 11a71ed8caa27c4a0174f25750171282980bc26880Keisuke Kuroynagi * distributed under the License is distributed on an "AS IS" BASIS, 12a71ed8caa27c4a0174f25750171282980bc26880Keisuke Kuroynagi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a71ed8caa27c4a0174f25750171282980bc26880Keisuke Kuroynagi * See the License for the specific language governing permissions and 14a71ed8caa27c4a0174f25750171282980bc26880Keisuke Kuroynagi * limitations under the License. 15a71ed8caa27c4a0174f25750171282980bc26880Keisuke Kuroynagi */ 16a71ed8caa27c4a0174f25750171282980bc26880Keisuke Kuroynagi 17f1e383ed454b4115436d2ce7429ab944560a19a4Keisuke Kuroyanagi#include "suggest/policyimpl/dictionary/shortcut/shortcut_list_reading_utils.h" 18a71ed8caa27c4a0174f25750171282980bc26880Keisuke Kuroynagi 199ea9c61c99b2fc8ff9a5bbd02c0ad81a828b930cKeisuke Kuroyanagi#include "suggest/policyimpl/dictionary/utils/byte_array_utils.h" 209ea9c61c99b2fc8ff9a5bbd02c0ad81a828b930cKeisuke Kuroyanagi 21a71ed8caa27c4a0174f25750171282980bc26880Keisuke Kuroynaginamespace latinime { 22a71ed8caa27c4a0174f25750171282980bc26880Keisuke Kuroynagi 23a71ed8caa27c4a0174f25750171282980bc26880Keisuke Kuroynagi// Flag for presence of more attributes 24f4688f8df09419dee4c3eaca47bce61967bd9926Keisuke Kuroyanagiconst ShortcutListReadingUtils::ShortcutFlags 25f4688f8df09419dee4c3eaca47bce61967bd9926Keisuke Kuroyanagi ShortcutListReadingUtils::FLAG_ATTRIBUTE_HAS_NEXT = 0x80; 26a71ed8caa27c4a0174f25750171282980bc26880Keisuke Kuroynagi// Mask for attribute probability, stored on 4 bits inside the flags byte. 27f4688f8df09419dee4c3eaca47bce61967bd9926Keisuke Kuroyanagiconst ShortcutListReadingUtils::ShortcutFlags 28f4688f8df09419dee4c3eaca47bce61967bd9926Keisuke Kuroyanagi ShortcutListReadingUtils::MASK_ATTRIBUTE_PROBABILITY = 0x0F; 29f4688f8df09419dee4c3eaca47bce61967bd9926Keisuke Kuroyanagiconst int ShortcutListReadingUtils::SHORTCUT_LIST_SIZE_FIELD_SIZE = 2; 305ac44bdc2aea383550b60907130f38ee2277f979Keisuke Kuroynagi// The numeric value of the shortcut probability that means 'whitelist'. 31f4688f8df09419dee4c3eaca47bce61967bd9926Keisuke Kuroyanagiconst int ShortcutListReadingUtils::WHITELIST_SHORTCUT_PROBABILITY = 15; 32a71ed8caa27c4a0174f25750171282980bc26880Keisuke Kuroynagi 339ea9c61c99b2fc8ff9a5bbd02c0ad81a828b930cKeisuke Kuroyanagi/* static */ ShortcutListReadingUtils::ShortcutFlags 349ea9c61c99b2fc8ff9a5bbd02c0ad81a828b930cKeisuke Kuroyanagi ShortcutListReadingUtils::getFlagsAndForwardPointer(const uint8_t *const dictRoot, 359ea9c61c99b2fc8ff9a5bbd02c0ad81a828b930cKeisuke Kuroyanagi int *const pos) { 369ea9c61c99b2fc8ff9a5bbd02c0ad81a828b930cKeisuke Kuroyanagi return ByteArrayUtils::readUint8AndAdvancePosition(dictRoot, pos); 379ea9c61c99b2fc8ff9a5bbd02c0ad81a828b930cKeisuke Kuroyanagi} 389ea9c61c99b2fc8ff9a5bbd02c0ad81a828b930cKeisuke Kuroyanagi 399ea9c61c99b2fc8ff9a5bbd02c0ad81a828b930cKeisuke Kuroyanagi/* static */ int ShortcutListReadingUtils::getShortcutListSizeAndForwardPointer( 409ea9c61c99b2fc8ff9a5bbd02c0ad81a828b930cKeisuke Kuroyanagi const uint8_t *const dictRoot, int *const pos) { 419ea9c61c99b2fc8ff9a5bbd02c0ad81a828b930cKeisuke Kuroyanagi // readUint16andAdvancePosition() returns an offset *including* the uint16 field itself. 429ea9c61c99b2fc8ff9a5bbd02c0ad81a828b930cKeisuke Kuroyanagi return ByteArrayUtils::readUint16AndAdvancePosition(dictRoot, pos) 439ea9c61c99b2fc8ff9a5bbd02c0ad81a828b930cKeisuke Kuroyanagi - SHORTCUT_LIST_SIZE_FIELD_SIZE; 449ea9c61c99b2fc8ff9a5bbd02c0ad81a828b930cKeisuke Kuroyanagi} 459ea9c61c99b2fc8ff9a5bbd02c0ad81a828b930cKeisuke Kuroyanagi 469ea9c61c99b2fc8ff9a5bbd02c0ad81a828b930cKeisuke Kuroyanagi/* static */ int ShortcutListReadingUtils::readShortcutTarget( 479ea9c61c99b2fc8ff9a5bbd02c0ad81a828b930cKeisuke Kuroyanagi const uint8_t *const dictRoot, const int maxLength, int *const outWord, int *const pos) { 489ea9c61c99b2fc8ff9a5bbd02c0ad81a828b930cKeisuke Kuroyanagi return ByteArrayUtils::readStringAndAdvancePosition(dictRoot, maxLength, outWord, pos); 499ea9c61c99b2fc8ff9a5bbd02c0ad81a828b930cKeisuke Kuroyanagi} 509ea9c61c99b2fc8ff9a5bbd02c0ad81a828b930cKeisuke Kuroyanagi 51a71ed8caa27c4a0174f25750171282980bc26880Keisuke Kuroynagi} // namespace latinime 52