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