11ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski/* 21ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski * Copyright (C) 2015 The Android Open Source Project 31ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski * 41ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski * Licensed under the Apache License, Version 2.0 (the "License"); 51ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski * you may not use this file except in compliance with the License. 61ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski * You may obtain a copy of the License at 71ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski * 81ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski * http://www.apache.org/licenses/LICENSE-2.0 91ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski * 101ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski * Unless required by applicable law or agreed to in writing, software 111ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski * distributed under the License is distributed on an "AS IS" BASIS, 121ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski * See the License for the specific language governing permissions and 141ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski * limitations under the License. 151ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski */ 161ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 171ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski#ifndef AAPT_FLAGS_H 181ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski#define AAPT_FLAGS_H 191ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 201ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski#include "util/Maybe.h" 211ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski#include "util/StringPiece.h" 221ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 231ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski#include <functional> 241ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski#include <ostream> 251ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski#include <string> 261ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski#include <vector> 271ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 281ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinskinamespace aapt { 291ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 301ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinskiclass Flags { 311ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinskipublic: 321ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski Flags& requiredFlag(const StringPiece& name, const StringPiece& description, 331ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski std::string* value); 341ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski Flags& requiredFlagList(const StringPiece& name, const StringPiece& description, 351ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski std::vector<std::string>* value); 361ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski Flags& optionalFlag(const StringPiece& name, const StringPiece& description, 371ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski Maybe<std::string>* value); 381ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski Flags& optionalFlagList(const StringPiece& name, const StringPiece& description, 391ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski std::vector<std::string>* value); 401ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski Flags& optionalSwitch(const StringPiece& name, const StringPiece& description, 411ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski bool* value); 421ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 431ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski void usage(const StringPiece& command, std::ostream* out); 441ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 451ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski bool parse(const StringPiece& command, const std::vector<StringPiece>& args, 461ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski std::ostream* outError); 471ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 481ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski const std::vector<std::string>& getArgs(); 491ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 501ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinskiprivate: 511ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski struct Flag { 521ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski std::string name; 531ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski std::string description; 541ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski std::function<bool(const StringPiece& value)> action; 551ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski bool required; 561ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski size_t numArgs; 571ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 581ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski bool parsed; 591ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski }; 601ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 611ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski std::vector<Flag> mFlags; 621ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski std::vector<std::string> mArgs; 631ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski}; 641ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 651ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski} // namespace aapt 661ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 671ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski#endif // AAPT_FLAGS_H 68