11e2752924d921a9a2a26bf4e72e6db8d4e21982cKeisuke Kuroyanagi/* 21e2752924d921a9a2a26bf4e72e6db8d4e21982cKeisuke Kuroyanagi * Copyright (C) 2014, The Android Open Source Project 31e2752924d921a9a2a26bf4e72e6db8d4e21982cKeisuke Kuroyanagi * 41e2752924d921a9a2a26bf4e72e6db8d4e21982cKeisuke Kuroyanagi * Licensed under the Apache License, Version 2.0 (the "License"); 51e2752924d921a9a2a26bf4e72e6db8d4e21982cKeisuke Kuroyanagi * you may not use this file except in compliance with the License. 61e2752924d921a9a2a26bf4e72e6db8d4e21982cKeisuke Kuroyanagi * You may obtain a copy of the License at 71e2752924d921a9a2a26bf4e72e6db8d4e21982cKeisuke Kuroyanagi * 81e2752924d921a9a2a26bf4e72e6db8d4e21982cKeisuke Kuroyanagi * http://www.apache.org/licenses/LICENSE-2.0 91e2752924d921a9a2a26bf4e72e6db8d4e21982cKeisuke Kuroyanagi * 101e2752924d921a9a2a26bf4e72e6db8d4e21982cKeisuke Kuroyanagi * Unless required by applicable law or agreed to in writing, software 111e2752924d921a9a2a26bf4e72e6db8d4e21982cKeisuke Kuroyanagi * distributed under the License is distributed on an "AS IS" BASIS, 121e2752924d921a9a2a26bf4e72e6db8d4e21982cKeisuke Kuroyanagi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131e2752924d921a9a2a26bf4e72e6db8d4e21982cKeisuke Kuroyanagi * See the License for the specific language governing permissions and 141e2752924d921a9a2a26bf4e72e6db8d4e21982cKeisuke Kuroyanagi * limitations under the License. 151e2752924d921a9a2a26bf4e72e6db8d4e21982cKeisuke Kuroyanagi */ 161e2752924d921a9a2a26bf4e72e6db8d4e21982cKeisuke Kuroyanagi 1788bc312ad34321fb3e81be2dc939a889d065f4a7Keisuke Kuroyanagi#include "dictionary/structure/v2/ver2_patricia_trie_node_reader.h" 181e2752924d921a9a2a26bf4e72e6db8d4e21982cKeisuke Kuroyanagi 1988bc312ad34321fb3e81be2dc939a889d065f4a7Keisuke Kuroyanagi#include "dictionary/structure/pt_common/patricia_trie_reading_utils.h" 201e2752924d921a9a2a26bf4e72e6db8d4e21982cKeisuke Kuroyanagi 211e2752924d921a9a2a26bf4e72e6db8d4e21982cKeisuke Kuroyanaginamespace latinime { 221e2752924d921a9a2a26bf4e72e6db8d4e21982cKeisuke Kuroyanagi 230fbca1ac2388db81a443c1705732130564c3f714Keisuke Kuroyanagiconst PtNodeParams Ver2ParticiaTrieNodeReader::fetchPtNodeParamsInBufferFromPtNodePos( 241e2752924d921a9a2a26bf4e72e6db8d4e21982cKeisuke Kuroyanagi const int ptNodePos) const { 256258c57c323e35819262fc0ce0c7ce60ea492b77Keisuke Kuroyanagi if (ptNodePos < 0 || ptNodePos >= static_cast<int>(mBuffer.size())) { 261e2752924d921a9a2a26bf4e72e6db8d4e21982cKeisuke Kuroyanagi // Reading invalid position because of bug or broken dictionary. 276258c57c323e35819262fc0ce0c7ce60ea492b77Keisuke Kuroyanagi AKLOGE("Fetching PtNode info from invalid dictionary position: %d, dictionary size: %zd", 286258c57c323e35819262fc0ce0c7ce60ea492b77Keisuke Kuroyanagi ptNodePos, mBuffer.size()); 291e2752924d921a9a2a26bf4e72e6db8d4e21982cKeisuke Kuroyanagi ASSERT(false); 301e2752924d921a9a2a26bf4e72e6db8d4e21982cKeisuke Kuroyanagi return PtNodeParams(); 311e2752924d921a9a2a26bf4e72e6db8d4e21982cKeisuke Kuroyanagi } 321e2752924d921a9a2a26bf4e72e6db8d4e21982cKeisuke Kuroyanagi PatriciaTrieReadingUtils::NodeFlags flags; 331e2752924d921a9a2a26bf4e72e6db8d4e21982cKeisuke Kuroyanagi int mergedNodeCodePointCount = 0; 341e2752924d921a9a2a26bf4e72e6db8d4e21982cKeisuke Kuroyanagi int mergedNodeCodePoints[MAX_WORD_LENGTH]; 351e2752924d921a9a2a26bf4e72e6db8d4e21982cKeisuke Kuroyanagi int probability = NOT_A_PROBABILITY; 361e2752924d921a9a2a26bf4e72e6db8d4e21982cKeisuke Kuroyanagi int childrenPos = NOT_A_DICT_POS; 371e2752924d921a9a2a26bf4e72e6db8d4e21982cKeisuke Kuroyanagi int shortcutPos = NOT_A_DICT_POS; 381e2752924d921a9a2a26bf4e72e6db8d4e21982cKeisuke Kuroyanagi int bigramPos = NOT_A_DICT_POS; 391e2752924d921a9a2a26bf4e72e6db8d4e21982cKeisuke Kuroyanagi int siblingPos = NOT_A_DICT_POS; 4044efbe64b1ba44f8edf13a52eca630fce3d7c809Adrian Velicu PatriciaTrieReadingUtils::readPtNodeInfo(mBuffer.data(), ptNodePos, mShortcutPolicy, 41fb2bde5a688d93aa946e3dd923aa1e99588777fcAkifumi Yoshimoto mBigramPolicy, mCodePointTable, &flags, &mergedNodeCodePointCount, mergedNodeCodePoints, 42fb2bde5a688d93aa946e3dd923aa1e99588777fcAkifumi Yoshimoto &probability, &childrenPos, &shortcutPos, &bigramPos, &siblingPos); 431e2752924d921a9a2a26bf4e72e6db8d4e21982cKeisuke Kuroyanagi if (mergedNodeCodePointCount <= 0) { 441e2752924d921a9a2a26bf4e72e6db8d4e21982cKeisuke Kuroyanagi AKLOGE("Empty PtNode is not allowed. Code point count: %d", mergedNodeCodePointCount); 451e2752924d921a9a2a26bf4e72e6db8d4e21982cKeisuke Kuroyanagi ASSERT(false); 461e2752924d921a9a2a26bf4e72e6db8d4e21982cKeisuke Kuroyanagi return PtNodeParams(); 471e2752924d921a9a2a26bf4e72e6db8d4e21982cKeisuke Kuroyanagi } 481e2752924d921a9a2a26bf4e72e6db8d4e21982cKeisuke Kuroyanagi return PtNodeParams(ptNodePos, flags, mergedNodeCodePointCount, mergedNodeCodePoints, 491e2752924d921a9a2a26bf4e72e6db8d4e21982cKeisuke Kuroyanagi probability, childrenPos, shortcutPos, bigramPos, siblingPos); 501e2752924d921a9a2a26bf4e72e6db8d4e21982cKeisuke Kuroyanagi} 511e2752924d921a9a2a26bf4e72e6db8d4e21982cKeisuke Kuroyanagi 521e2752924d921a9a2a26bf4e72e6db8d4e21982cKeisuke Kuroyanagi} 53