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" 230ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi 240ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanaginamespace latinime { 250ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi 260ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi/** 270ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi * Methods to handle binary dictionary format version. 280ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi */ 2990619ae02b1861e644db6a0d72d0e5f9c195ef3eKeisuke Kuroyanagiclass FormatUtils { 300ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi public: 310ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi enum FORMAT_VERSION { 322fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa // These MUST have the same values as the relevant constants in FormatSpec.java. 332fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa VERSION_2 = 2, 34455dc84cf2c6526329b535f30000ea45b7d4d4d7Keisuke Kuroyanagi VERSION_4_ONLY_FOR_TESTING = 399, 35a37f374ad140f14e5e8ecaef9e1dbee3b1d7b84cKeisuke Kuroyanagi VERSION_4 = 402, 36a37f374ad140f14e5e8ecaef9e1dbee3b1d7b84cKeisuke Kuroyanagi VERSION_4_DEV = 403, 372fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa UNKNOWN_VERSION = -1 380ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi }; 390ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi 40484fa7b59cb0659ac18fa68da5c7b641d9255be8Keisuke Kuroyanagi // 32 bit magic number is stored at the beginning of the dictionary header to reject 41484fa7b59cb0659ac18fa68da5c7b641d9255be8Keisuke Kuroyanagi // unsupported or obsolete dictionary formats. 42484fa7b59cb0659ac18fa68da5c7b641d9255be8Keisuke Kuroyanagi static const uint32_t MAGIC_NUMBER; 43484fa7b59cb0659ac18fa68da5c7b641d9255be8Keisuke Kuroyanagi 44455dc84cf2c6526329b535f30000ea45b7d4d4d7Keisuke Kuroyanagi static FORMAT_VERSION getFormatVersion(const int formatVersion); 450ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi static FORMAT_VERSION detectFormatVersion(const uint8_t *const dict, const int dictSize); 460ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi 470ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi private: 4890619ae02b1861e644db6a0d72d0e5f9c195ef3eKeisuke Kuroyanagi DISALLOW_IMPLICIT_CONSTRUCTORS(FormatUtils); 490ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi 500ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi static const int DICTIONARY_MINIMUM_SIZE; 510ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi}; 520ecfb9424754341d7ee41557fc1f913cb6ca79c2Keisuke Kuroyanagi} // namespace latinime 5390619ae02b1861e644db6a0d72d0e5f9c195ef3eKeisuke Kuroyanagi#endif /* LATINIME_FORMAT_UTILS_H */ 54