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