10ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi/* 20ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi * Copyright (C) 2013, The Android Open Source Project 30ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi * 40ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi * Licensed under the Apache License, Version 2.0 (the "License"); 50ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi * you may not use this file except in compliance with the License. 60ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi * You may obtain a copy of the License at 70ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi * 80ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi * http://www.apache.org/licenses/LICENSE-2.0 90ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi * 100ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi * Unless required by applicable law or agreed to in writing, software 110ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi * distributed under the License is distributed on an "AS IS" BASIS, 120ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi * See the License for the specific language governing permissions and 140ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi * limitations under the License. 150ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi */ 160ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi 1790619ae02b1861e644db6a0d72d0e5f9c195ef3eKeisuke Kuroyanagi#ifndef LATINIME_FORMAT_UTILS_H 1890619ae02b1861e644db6a0d72d0e5f9c195ef3eKeisuke Kuroyanagi#define LATINIME_FORMAT_UTILS_H 190ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi 20cafab169cdb21244c82b99c09983c98066113d87Ken Wakasa#include <cstdint> 210ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi 220ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi#include "defines.h" 234fbb2148ee149ef647f3f43c615911455228f3afKeisuke Kuroyanagi#include "utils/byte_array_view.h" 240ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi 250ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanaginamespace latinime { 260ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi 270ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi/** 280ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi * Methods to handle binary dictionary format version. 290ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi */ 3090619ae02b1861e644db6a0d72d0e5f9c195ef3eKeisuke Kuroyanagiclass FormatUtils { 310ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi public: 320ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi enum FORMAT_VERSION { 332fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa // These MUST have the same values as the relevant constants in FormatSpec.java. 347c87859d4c16c9cf19b095b865d7000ebc3cdaa9Adrian Velicu // TODO: Remove VERSION_2 and VERSION_201 when we: 357c87859d4c16c9cf19b095b865d7000ebc3cdaa9Adrian Velicu // * Confirm that old versions of LatinIME download old-format dictionaries 367c87859d4c16c9cf19b095b865d7000ebc3cdaa9Adrian Velicu // * We no longer need the corresponding constants on the Java side for dicttool 372fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa VERSION_2 = 2, 38fb2bde5a688d93aa946e3dd923aa1e99588777fcAkifumi Yoshimoto VERSION_201 = 201, 397c87859d4c16c9cf19b095b865d7000ebc3cdaa9Adrian Velicu VERSION_202 = 202, 40455dc84cf2c6526329b535f30000ea45b7d4d4d7Keisuke Kuroyanagi VERSION_4_ONLY_FOR_TESTING = 399, 41ea468cc9de468b6574f98b3a7614decfcb7e456eKeisuke Kuroyanagi VERSION_402 = 402, 42ea468cc9de468b6574f98b3a7614decfcb7e456eKeisuke Kuroyanagi VERSION_403 = 403, 432fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa UNKNOWN_VERSION = -1 440ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi }; 450ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi 46484fa7b59cb0659ac18fa68da5c7b641d9255be8Keisuke Kuroyanagi // 32 bit magic number is stored at the beginning of the dictionary header to reject 47484fa7b59cb0659ac18fa68da5c7b641d9255be8Keisuke Kuroyanagi // unsupported or obsolete dictionary formats. 48484fa7b59cb0659ac18fa68da5c7b641d9255be8Keisuke Kuroyanagi static const uint32_t MAGIC_NUMBER; 49484fa7b59cb0659ac18fa68da5c7b641d9255be8Keisuke Kuroyanagi 50455dc84cf2c6526329b535f30000ea45b7d4d4d7Keisuke Kuroyanagi static FORMAT_VERSION getFormatVersion(const int formatVersion); 514fbb2148ee149ef647f3f43c615911455228f3afKeisuke Kuroyanagi static FORMAT_VERSION detectFormatVersion(const ReadOnlyByteArrayView dictBuffer); 520ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi 530ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi private: 5490619ae02b1861e644db6a0d72d0e5f9c195ef3eKeisuke Kuroyanagi DISALLOW_IMPLICIT_CONSTRUCTORS(FormatUtils); 550ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi 564fbb2148ee149ef647f3f43c615911455228f3afKeisuke Kuroyanagi static const size_t DICTIONARY_MINIMUM_SIZE; 570ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi}; 580ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi} // namespace latinime 5990619ae02b1861e644db6a0d72d0e5f9c195ef3eKeisuke Kuroyanagi#endif /* LATINIME_FORMAT_UTILS_H */ 60