blob: 28e5ce3bcd0f0fcbcf7a0e475b06920090885fce [file] [log] [blame]
Ratan Guptab38401b2018-03-16 12:44:26 +05301#pragma once
2
3#include <getopt.h>
Patrick Venture189d44e2018-07-09 12:30:59 -07004
Ratan Guptab38401b2018-03-16 12:44:26 +05305#include <map>
6#include <string>
7
8namespace phosphor
9{
10namespace network
11{
12namespace ncsi
13{
14/** @brief Class - Encapsulates parsing command line options and
15 * populating arguments
16 */
17class ArgumentParser
18{
Gunnar Mills57d9c502018-09-14 14:42:34 -050019 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;
Ratan Guptab38401b2018-03-16 12:44:26 +053026
Gunnar Mills57d9c502018-09-14 14:42:34 -050027 /** @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);
Ratan Guptab38401b2018-03-16 12:44:26 +053034
Gunnar Mills57d9c502018-09-14 14:42:34 -050035 /** @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);
Ratan Guptab38401b2018-03-16 12:44:26 +053042
Gunnar Mills57d9c502018-09-14 14:42:34 -050043 /** @brief Displays usage
44 *
45 * @param argv - the main function's argv passed as is
46 */
47 static void usage(char** argv);
Ratan Guptab38401b2018-03-16 12:44:26 +053048
Gunnar Mills57d9c502018-09-14 14:42:34 -050049 /** @brief Set to 'true' when an option is passed */
50 static const std::string trueString;
Ratan Guptab38401b2018-03-16 12:44:26 +053051
Gunnar Mills57d9c502018-09-14 14:42:34 -050052 /** @brief Set to '' when an option is not passed */
53 static const std::string emptyString;
Ratan Guptab38401b2018-03-16 12:44:26 +053054
Gunnar Mills57d9c502018-09-14 14:42:34 -050055 private:
56 /** @brief Option to argument mapping */
57 std::map<const std::string, std::string> arguments;
Ratan Guptab38401b2018-03-16 12:44:26 +053058
Gunnar Mills57d9c502018-09-14 14:42:34 -050059 /** @brief Array of struct options as needed by getopt_long */
60 static const option options[];
Ratan Guptab38401b2018-03-16 12:44:26 +053061
Gunnar Mills57d9c502018-09-14 14:42:34 -050062 /** @brief optstring as needed by getopt_long */
63 static const char* optionStr;
Ratan Guptab38401b2018-03-16 12:44:26 +053064};
65
66} // namespace ncsi
67} // namespace network
68} // namespace phosphor