176e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi/*
276e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi * Copyright (C) 2013, The Android Open Source Project
376e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi *
476e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi * Licensed under the Apache License, Version 2.0 (the "License");
576e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi * you may not use this file except in compliance with the License.
676e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi * You may obtain a copy of the License at
776e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi *
876e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi *     http://www.apache.org/licenses/LICENSE-2.0
976e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi *
1076e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi * Unless required by applicable law or agreed to in writing, software
1176e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi * distributed under the License is distributed on an "AS IS" BASIS,
1276e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1376e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi * See the License for the specific language governing permissions and
1476e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi * limitations under the License.
1576e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi */
1676e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi
1776e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi#ifndef LATINIME_DICTIONARY_HEADER_STRUCTURE_POLICY_H
1876e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi#define LATINIME_DICTIONARY_HEADER_STRUCTURE_POLICY_H
1976e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi
20fc9ca59cc1dccc8353528c42a7eb710ad6d90e14Keisuke Kuroyanagi#include <map>
21fc9ca59cc1dccc8353528c42a7eb710ad6d90e14Keisuke Kuroyanagi#include <vector>
22fc9ca59cc1dccc8353528c42a7eb710ad6d90e14Keisuke Kuroyanagi
2376e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi#include "defines.h"
2476e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi
2576e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanaginamespace latinime {
2676e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi
2776e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi/*
2876e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi * This class abstracts structure of dictionaries.
2976e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi * Implement this policy to support additional dictionaries.
3076e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi */
3176e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagiclass DictionaryHeaderStructurePolicy {
3276e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi public:
330b1fa0c1c7572893365c019780357a817158e5eaKen Wakasa    typedef std::map<std::vector<int>, std::vector<int>> AttributeMap;
34fc9ca59cc1dccc8353528c42a7eb710ad6d90e14Keisuke Kuroyanagi
3576e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi    virtual ~DictionaryHeaderStructurePolicy() {}
3676e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi
372fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa    virtual int getFormatVersionNumber() const = 0;
3876e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi
39fc9ca59cc1dccc8353528c42a7eb710ad6d90e14Keisuke Kuroyanagi    virtual int getSize() const = 0;
40fc9ca59cc1dccc8353528c42a7eb710ad6d90e14Keisuke Kuroyanagi
41fc9ca59cc1dccc8353528c42a7eb710ad6d90e14Keisuke Kuroyanagi    virtual const AttributeMap *getAttributeMap() const = 0;
42fc9ca59cc1dccc8353528c42a7eb710ad6d90e14Keisuke Kuroyanagi
4376e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi    virtual bool requiresGermanUmlautProcessing() const = 0;
4476e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi
4576e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi    virtual float getMultiWordCostMultiplier() const = 0;
4676e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi
4776e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi    virtual void readHeaderValueOrQuestionMark(const char *const key, int *outValue,
4876e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi            int outValueSize) const = 0;
4976e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi
5054622d38c246cb5b2ccb24c6756df25b0ce730f4Keisuke Kuroyanagi    virtual bool shouldBoostExactMatches() const = 0;
5154622d38c246cb5b2ccb24c6756df25b0ce730f4Keisuke Kuroyanagi
528a9d9de72a9ab02cb4726c205213d4f0b9f58e07Keisuke Kuroyanagi    virtual const std::vector<int> *getLocale() const = 0;
538a9d9de72a9ab02cb4726c205213d4f0b9f58e07Keisuke Kuroyanagi
542a015dcb25b2996ccca0d9fac74b334aa35928a3Keisuke Kuroyanagi    virtual bool supportsBeginningOfSentence() const = 0;
552a015dcb25b2996ccca0d9fac74b334aa35928a3Keisuke Kuroyanagi
5676e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi protected:
5776e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi    DictionaryHeaderStructurePolicy() {}
5876e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi
5976e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi private:
6076e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi    DISALLOW_COPY_AND_ASSIGN(DictionaryHeaderStructurePolicy);
6176e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi};
6276e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi} // namespace latinime
6376e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi#endif /* LATINIME_DICTIONARY_HEADER_STRUCTURE_POLICY_H */
64