1 #pragma once 2 3 #include <getopt.h> 4 5 #include <map> 6 #include <string> 7 8 namespace phosphor 9 { 10 namespace network 11 { 12 namespace ncsi 13 { 14 /** @brief Class - Encapsulates parsing command line options and 15 * populating arguments 16 */ 17 class ArgumentParser 18 { 19 public: 20 ArgumentParser() = delete; 21 ~ArgumentParser() = default; 22 ArgumentParser(const ArgumentParser&) = delete; 23 ArgumentParser& operator=(const ArgumentParser&) = delete; 24 ArgumentParser(ArgumentParser&&) = default; 25 ArgumentParser& operator=(ArgumentParser&&) = default; 26 27 /** @brief Constructs Argument object 28 * 29 * @param argc - the main function's argc passed as is 30 * @param argv - the main function's argv passed as is 31 * @return Object constructed 32 */ 33 ArgumentParser(int argc, char** argv); 34 35 /** @brief Given an option, returns its argument(optarg) 36 * 37 * @param opt - command line option string 38 * 39 * @return argument which is a standard optarg 40 */ 41 const std::string& operator[](const std::string& opt); 42 43 /** @brief Displays usage 44 * 45 * @param argv - the main function's argv passed as is 46 */ 47 static void usage(char** argv); 48 49 /** @brief Set to 'true' when an option is passed */ 50 static const std::string trueString; 51 52 /** @brief Set to '' when an option is not passed */ 53 static const std::string emptyString; 54 55 private: 56 /** @brief Option to argument mapping */ 57 std::map<const std::string, std::string> arguments; 58 59 /** @brief Array of struct options as needed by getopt_long */ 60 static const option options[]; 61 62 /** @brief optstring as needed by getopt_long */ 63 static const char* optionStr; 64 }; 65 66 } // namespace ncsi 67 } // namespace network 68 } // namespace phosphor 69