| #ifndef ARGUMENT_H |
| #define ARGUMENT_H |
| #include <getopt.h> |
| |
| #include <map> |
| #include <string> |
| |
| namespace phosphor |
| { |
| namespace led |
| { |
| /** @brief Class - Encapsulates parsing command line options and |
| * populating arguments |
| */ |
| class ArgumentParser |
| { |
| public: |
| ArgumentParser() = delete; |
| ~ArgumentParser() = default; |
| ArgumentParser(const ArgumentParser&) = delete; |
| ArgumentParser& operator=(const ArgumentParser&) = delete; |
| ArgumentParser(ArgumentParser&&) = default; |
| ArgumentParser& operator=(ArgumentParser&&) = default; |
| |
| /** @brief Constructs Argument object |
| * |
| * @param argc - the main function's argc passed as is |
| * @param argv - the main function's argv passed as is |
| * @return Object constructed |
| */ |
| ArgumentParser(int argc, char** argv); |
| |
| /** @brief Given a option, returns its argument(optarg) */ |
| const std::string& operator[](const std::string& opt); |
| |
| /** @brief Displays usage */ |
| static void usage(char** argv); |
| |
| private: |
| /** @brief Option to argument mapping */ |
| std::map<const std::string, std::string> arguments; |
| |
| /** @brief Array of struct options as needed by getopt_long */ |
| // NOLINTNEXTLINE(cppcoreguidelines-avoid-c-arrays) |
| static inline const option options[] = { |
| {"path", required_argument, nullptr, 'p'}, |
| {"help", no_argument, nullptr, 'h'}, |
| {nullptr, 0, nullptr, 0}, |
| }; |
| |
| /** @brief optstring as needed by getopt_long */ |
| static inline const char* const optionstr = "p:?h"; |
| }; |
| |
| } // namespace led |
| } // namespace phosphor |
| |
| #endif |