8 #include "Arp/System/Core/Enum.hxx"
9 #include "Arp/System/Commons/Exceptions/Exceptions.h"
10 #include "boost/program_options.hpp"
12 namespace Arp {
namespace System {
namespace Commons {
namespace Configuration
15 using namespace boost::program_options;
42 void AddOption(
const String& name,
const T& defaultValue,
const String& help);
44 void AddOptionEnum(
const String& name,
const String& help);
47 void ParseArgs(
int argc,
const char*
const argv[]);
48 void PrintDescription(std::ostream& os = std::cout);
49 bool ExistsOption(
const String& optionName)
const;
52 T GetOptionValue(
const String& optionName)
const;
54 bool TryGetOptionValue(
const String& optionName, T& result)
const;
56 Enum<T> GetOptionValueEnum(
const char* optionName);
58 bool TryGetOptionValueEnum(
const char* optionName,
Enum<T>& value);
67 options_description desc;
68 variables_map optionMap;
71 static const String helpOptionName;
74 static const String helpOptionDescription;
80 : desc(
"Allowed options")
83 (helpOptionName, helpOptionDescription);
86 inline void CommandLineOptions::AddOption(
const String& name,
const String& help)
93 inline void CommandLineOptions::AddOption(
const String& name,
const String& help)
96 (name, value<T>(), help);
100 inline void CommandLineOptions::AddOption(
const String& name,
const T& defaultValue,
const String& help)
103 (name, value<T>()->default_value(defaultValue), help);
107 inline void CommandLineOptions::AddOptionEnum(
const String& name,
const String& help)
110 (name, value<String>(), help);
114 inline void CommandLineOptions::AddOptionEnum(
const String& name,
const Enum<T>& defaultValue,
const String& help)
117 (name, value<String>()->default_value(defaultValue.ToString()), help);
120 inline void CommandLineOptions::ParseArgs(
int argc,
const char*
const argv[])
122 store(parse_command_line(argc, argv, this->desc), optionMap);
126 inline void CommandLineOptions::PrintDescription(std::ostream& os)
128 os << desc << std::endl;
131 inline bool CommandLineOptions::ExistsOption(
const String& optionName)
const
134 if (optionMap.count(optionName))
142 inline T CommandLineOptions::GetOptionValue(
const String& optionName)
const
145 if(!this->TryGetOptionValue(optionName, result))
153 inline bool CommandLineOptions::TryGetOptionValue(
const String& optionName, T& result)
const
156 if(optionMap.count(optionName) > 0)
158 result = optionMap[optionName].as<T>();
165 Enum<T> CommandLineOptions::GetOptionValueEnum(
const char* optionName)
169 if (TryGetOptionValueEnum(optionName, returnValue))
175 throw Exception(
"GetOptionValueEnum failed for mandatory option: {0}", optionName);
181 bool CommandLineOptions::TryGetOptionValueEnum(
const char* optionName, Enum<T>& value)
184 if (!this->TryGetOptionValue<String>(optionName, returnValue))
Adapter class for enums to make them loggable and parsable from e.g. XML files.
Definition: Enum.hxx:23
Definition: CommandLineOptions.hpp:18
CommandLineOptions & operator=(const CommandLineOptions &arg)=delete
Assignment operator.
~CommandLineOptions(void)=default
Destructs this instance and frees all resources.
CommandLineOptions(const CommandLineOptions &arg)=delete
Copy constructor.
CommandLineOptions(void)
Constructs an CommandLineOptions instance.
Definition: CommandLineOptions.hpp:79
static KeyNotFoundException Create(const T &keyValue)
Creates an KeyNotFoundException instance using a default message text.
Definition: KeyNotFoundException.hpp:79
static Enum Parse(const String &input)
Parses the given input string.
Definition: Enum.hxx:228
Arp::BasicString< char8 > String
The Arp String class.
Definition: TypeSystem.h:27
@ System
System components used by the System, Device, Plc or Io domains.
Root namespace for the PLCnext API