179273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi/* 279273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi * Copyright (C) 2014 The Android Open Source Project 379273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi * 479273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi * Licensed under the Apache License, Version 2.0 (the "License"); 579273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi * you may not use this file except in compliance with the License. 679273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi * You may obtain a copy of the License at 779273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi * 879273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi * http://www.apache.org/licenses/LICENSE-2.0 979273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi * 1079273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi * Unless required by applicable law or agreed to in writing, software 1179273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi * distributed under the License is distributed on an "AS IS" BASIS, 1279273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1379273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi * See the License for the specific language governing permissions and 1479273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi * limitations under the License. 1579273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi */ 1679273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi 1779273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi#ifndef LATINIME_DICT_TOOLKIT_ARGUMENTS_AND_OPTIONS_H 1879273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi#define LATINIME_DICT_TOOLKIT_ARGUMENTS_AND_OPTIONS_H 1979273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi 2079273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi#include <string> 2179273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi#include <unordered_map> 2279273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi#include <vector> 2379273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi 2479273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi#include "dict_toolkit_defines.h" 2579273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi 2679273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanaginamespace latinime { 2779273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanaginamespace dicttoolkit { 2879273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi 2979273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagiclass ArgumentsAndOptions { 3079273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi public: 3179273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi ArgumentsAndOptions() : mIsValid(false), mOptions(), mArguments() {} 3279273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi 3379273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi ArgumentsAndOptions(std::unordered_map<std::string, std::string> &&options, 3479273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi std::unordered_map<std::string, std::vector<std::string>> &&arguments) 3579273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi : mIsValid(true), mOptions(std::move(options)), mArguments(std::move(arguments)) {} 3679273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi 3779273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi bool isValid() const { 3879273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi return mIsValid; 3979273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi } 4079273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi 4179273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi bool hasOption(const std::string &optionName) const { 4279273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi return mOptions.find(optionName) != mOptions.end(); 4379273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi } 4479273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi 451f8d4f47e445bd4316f3e09228cff6de64105f13Keisuke Kuroyanagi const std::string &getOptionValue(const std::string &optionName) const { 461f8d4f47e445bd4316f3e09228cff6de64105f13Keisuke Kuroyanagi const auto &it = mOptions.find(optionName); 471f8d4f47e445bd4316f3e09228cff6de64105f13Keisuke Kuroyanagi ASSERT(it != mOptions.end()); 481f8d4f47e445bd4316f3e09228cff6de64105f13Keisuke Kuroyanagi return it->second; 491f8d4f47e445bd4316f3e09228cff6de64105f13Keisuke Kuroyanagi } 501f8d4f47e445bd4316f3e09228cff6de64105f13Keisuke Kuroyanagi 511f8d4f47e445bd4316f3e09228cff6de64105f13Keisuke Kuroyanagi bool hasArgument(const std::string &name) const { 521f8d4f47e445bd4316f3e09228cff6de64105f13Keisuke Kuroyanagi const auto &it = mArguments.find(name); 531f8d4f47e445bd4316f3e09228cff6de64105f13Keisuke Kuroyanagi return it != mArguments.end() && !it->second.empty(); 541f8d4f47e445bd4316f3e09228cff6de64105f13Keisuke Kuroyanagi } 551f8d4f47e445bd4316f3e09228cff6de64105f13Keisuke Kuroyanagi 561f8d4f47e445bd4316f3e09228cff6de64105f13Keisuke Kuroyanagi const std::string &getSingleArgument(const std::string &name) const { 571f8d4f47e445bd4316f3e09228cff6de64105f13Keisuke Kuroyanagi const auto &it = mArguments.find(name); 581f8d4f47e445bd4316f3e09228cff6de64105f13Keisuke Kuroyanagi ASSERT(it != mArguments.end() && !it->second.empty()); 591f8d4f47e445bd4316f3e09228cff6de64105f13Keisuke Kuroyanagi return it->second.front(); 601f8d4f47e445bd4316f3e09228cff6de64105f13Keisuke Kuroyanagi } 611f8d4f47e445bd4316f3e09228cff6de64105f13Keisuke Kuroyanagi 621f8d4f47e445bd4316f3e09228cff6de64105f13Keisuke Kuroyanagi const std::vector<std::string> &getVariableLengthArguments(const std::string &name) const { 631f8d4f47e445bd4316f3e09228cff6de64105f13Keisuke Kuroyanagi const auto &it = mArguments.find(name); 641f8d4f47e445bd4316f3e09228cff6de64105f13Keisuke Kuroyanagi ASSERT(it != mArguments.end()); 651f8d4f47e445bd4316f3e09228cff6de64105f13Keisuke Kuroyanagi return it->second; 661f8d4f47e445bd4316f3e09228cff6de64105f13Keisuke Kuroyanagi } 671f8d4f47e445bd4316f3e09228cff6de64105f13Keisuke Kuroyanagi 6879273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi private: 6979273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi DISALLOW_ASSIGNMENT_OPERATOR(ArgumentsAndOptions); 7079273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi 7179273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi const bool mIsValid; 7279273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi const std::unordered_map<std::string, std::string> mOptions; 7379273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi const std::unordered_map<std::string, std::vector<std::string>> mArguments; 7479273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi}; 7579273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi} // namespace dicttoolkit 7679273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi} // namespace latinime 7779273b04772824a8c547e1a8d33900040a03264bKeisuke Kuroyanagi#endif // LATINIME_DICT_TOOLKIT_ARGUMENTS_AND_OPTIONS_H 78