/* SPDX-License-Identifier: GPL-2.0-or-later */ /* * Copyright (C) 2019, Google Inc. * * options.h - cam - Options parsing */ #ifndef __CAM_OPTIONS_H__ #define __CAM_OPTIONS_H__ #include #include #include class OptionsParser { public: enum OptionArgument { ArgumentNone, ArgumentRequired, ArgumentOptional, }; class Options { public: Options(); Options(Options &&other); Options &operator=(Options &&other); bool valid() const; bool isSet(int opt) const; const std::string &operator[](int opt) const; private: friend class OptionsParser; std::map values_; void clear(); }; void addOption(int opt, const char *help, const char *name = nullptr, OptionArgument argument = ArgumentNone, const char *argumentName = nullptr); Options parse(int argc, char *argv[]); void usage(); private: struct Option { int opt; const char *name; OptionArgument argument; const char *argumentName; const char *help; bool hasShortOption() const { return isalnum(opt); } bool hasLongOption() const { return name != nullptr; } }; std::vector