Pakman
Arguments.cc
1 #include <string>
2 #include <stdexcept>
3 
4 #include <getopt.h>
5 
6 #include "LongOptions.h"
7 #include "Arguments.h"
8 
9 Arguments::Arguments(const LongOptions& long_options, int argc, char *argv[])
10 {
11  // Process optional arguments
12  int c;
13  while ((c = getopt_long(argc, argv,
14  long_options.getShortOpts(),
15  long_options.getLongOpts(), nullptr)) != -1)
16  {
17  // Check for error
18  if (c == '?')
19  {
20  std::runtime_error e("an error occured while processing "
21  "arguments using getopt_long");
22  throw e;
23  }
24 
25  // Get long option name and save to m_optional_args
26  std::string&& current_option = long_options.getLongOptionName(c);
27 
28  m_optional_args[current_option].assign(
29  optarg == nullptr ? "" : optarg);
30  }
31 
32  // Process positional arguments
33  for (; optind < argc; optind++)
34  m_positional_args.push_back(argv[optind]);
35 }
36 
37 // Check if optional argument was set
38 bool Arguments::isOptionalArgumentSet(const std::string& option_name) const
39 {
40  return m_optional_args.count(option_name) == 1;
41 }
42 
43 // Return value of optional argument
44 // If optional argument does not have value, return empty string
45 std::string Arguments::optionalArgument(const std::string& option_name) const
46 {
47  return m_optional_args.at(option_name);
48 }
49 
50 // Get number of positional arguments
52 {
53  return m_positional_args.size();
54 }
55 
56 // Get positional argument from index
57 std::string Arguments::positionalArgument(int index) const
58 {
59  return m_positional_args.at(index);
60 }
std::string getLongOptionName(char short_option) const
Definition: LongOptions.cc:82
const char * getShortOpts() const
Definition: LongOptions.cc:77
bool isOptionalArgumentSet(const std::string &option_name) const
Definition: Arguments.cc:38
std::string positionalArgument(int index) const
Definition: Arguments.cc:57
int numberOfPositionalArguments() const
Definition: Arguments.cc:51
Arguments(const LongOptions &long_options, int argc, char *argv[])
Definition: Arguments.cc:9
const struct option * getLongOpts() const
Definition: LongOptions.cc:71
std::string optionalArgument(const std::string &option_name) const
Definition: Arguments.cc:45