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