15 #ifndef FAIRPROGOPTIONSHELPER_H 16 #define FAIRPROGOPTIONSHELPER_H 18 #include <boost/program_options.hpp> 19 #include <boost/filesystem.hpp> 20 #include <boost/spirit/home/support/detail/hold_any.hpp> 35 std::ostream& operator<<(std::ostream& os, const std::vector<T>& v)
37 for (
const auto& i : v)
48 std::string defaulted;
52 std::string ConvertVariableValueToString(
const boost::program_options::variable_value& varVal)
54 std::ostringstream oss;
55 if (
auto q = boost::any_cast<T>(&varVal.value())) {
67 using returned_type = std::string;
70 std::string Value(
const boost::program_options::variable_value& varVal,
const std::string&,
const std::string&)
72 return ConvertVariableValueToString<T>(varVal);
75 returned_type DefaultValue(
const std::string&)
77 return std::string(
"[unidentified]");
87 returned_type Value(
const boost::program_options::variable_value& varVal,
const std::string& type,
const std::string& defaulted)
89 return VarValInfo{ConvertVariableValueToString<T>(varVal), type, defaulted};
94 return VarValInfo{std::string(
"[unidentified]"), std::string(
"[unidentified]"), defaulted};
104 auto operator()(
const boost::program_options::variable_value& varVal) ->
typename T::returned_type
106 std::string defaulted;
108 if (varVal.defaulted())
110 defaulted =
" [default]";
114 defaulted =
" [provided]";
117 if (
typeid(std::string) == varVal.value().type())
118 return T::template Value<std::string>(varVal, std::string(
"<string>"), defaulted);
120 if (
typeid(std::vector<std::string>) == varVal.value().type())
121 return T::template Value<std::vector<std::string>>(varVal, std::string(
"<vector<string>>"), defaulted);
123 if (
typeid(
int) == varVal.value().type())
124 return T::template Value<int>(varVal, std::string(
"<int>"), defaulted);
126 if (
typeid(std::vector<int>) == varVal.value().type())
127 return T::template Value<std::vector<int>>(varVal, std::string(
"<vector<int>>"), defaulted);
129 if (
typeid(
float) == varVal.value().type())
130 return T::template Value<float>(varVal, std::string(
"<float>"), defaulted);
132 if (
typeid(std::vector<float>) == varVal.value().type())
133 return T::template Value<std::vector<float>>(varVal, std::string(
"<vector<float>>"), defaulted);
135 if (
typeid(
double) == varVal.value().type())
136 return T::template Value<double>(varVal, std::string(
"<double>"), defaulted);
138 if (
typeid(std::vector<double>) == varVal.value().type())
139 return T::template Value<std::vector<double>>(varVal, std::string(
"<vector<double>>"), defaulted);
141 if (
typeid(
short) == varVal.value().type())
142 return T::template Value<short>(varVal, std::string(
"<short>"), defaulted);
144 if (
typeid(std::vector<short>) == varVal.value().type())
145 return T::template Value<std::vector<short>>(varVal, std::string(
"<vector<short>>"), defaulted);
147 if (
typeid(
long) == varVal.value().type())
148 return T::template Value<long>(varVal, std::string(
"<long>"), defaulted);
150 if (
typeid(std::vector<long>) == varVal.value().type())
151 return T::template Value<std::vector<long>>(varVal, std::string(
"<vector<long>>"), defaulted);
153 if (
typeid(std::size_t) == varVal.value().type())
154 return T::template Value<std::size_t>(varVal, std::string(
"<std::size_t>"), defaulted);
156 if (
typeid(std::vector<std::size_t>) == varVal.value().type())
157 return T::template Value<std::vector<std::size_t>>(varVal, std::string(
"<vector<std::size_t>>"), defaulted);
159 if (
typeid(std::uint32_t) == varVal.value().type())
160 return T::template Value<std::uint32_t>(varVal, std::string(
"<std::uint32_t>"), defaulted);
162 if (
typeid(std::vector<std::uint32_t>) == varVal.value().type())
163 return T::template Value<std::vector<std::uint32_t>>(varVal, std::string(
"<vector<std::uint32_t>>"), defaulted);
165 if (
typeid(std::uint64_t) == varVal.value().type())
166 return T::template Value<std::uint64_t>(varVal, std::string(
"<std::uint64_t>"), defaulted);
168 if (
typeid(std::vector<std::uint64_t>) == varVal.value().type())
169 return T::template Value<std::vector<std::uint64_t>>(varVal, std::string(
"<vector<std::uint64_t>>"), defaulted);
171 if (
typeid(
bool) == varVal.value().type())
172 return T::template Value<bool>(varVal, std::string(
"<bool>"), defaulted);
174 if (
typeid(std::vector<bool>) == varVal.value().type())
175 return T::template Value<std::vector<bool>>(varVal, std::string(
"<vector<bool>>"), defaulted);
177 if (
typeid(boost::filesystem::path) == varVal.value().type())
178 return T::template Value<boost::filesystem::path>(varVal, std::string(
"<boost::filesystem::path>"), defaulted);
180 if (
typeid(std::vector<boost::filesystem::path>) == varVal.value().type())
181 return T::template Value<std::vector<boost::filesystem::path>>(varVal, std::string(
"<std::vector<boost::filesystem::path>>"), defaulted);
184 return T::DefaultValue(defaulted);
Definition: FairProgOptionsHelper.h:44
Definition: FairProgOptionsHelper.h:65
Tools for interfacing containers to the transport via polymorphic allocators.
Definition: DeviceRunner.h:23
Definition: FairProgOptionsHelper.h:82
Definition: FairProgOptionsHelper.h:102