/* 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 enum OptionArgument { ArgumentNone, ArgumentRequired, ArgumentOptional, }; 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; } }; template class OptionsBase { public: bool valid() const; bool isSet(const T &opt) const; const std::string &operator[](const T &opt) const; private: friend class OptionsParser; std::map values_; void clear(); }; class OptionsParser { public: class Options : public OptionsBase { }; 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: std::vector