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