15 #ifndef FAIRPROGOPTIONSHELPER_H 16 #define FAIRPROGOPTIONSHELPER_H 18 #include <boost/program_options.hpp> 19 #include <boost/filesystem.hpp> 36 std::string defaulted;
41 std::ostream& operator<<(std::ostream& os, const std::vector<T>& v)
43 std::copy(v.begin(), v.end(), std::ostream_iterator<T>(os,
" "));
48 bool typeIs(
const boost::program_options::variable_value& varValue)
50 auto& value = varValue.value();
51 if (
auto q = boost::any_cast<T>(&value))
62 std::string ConvertVariableValueToString(
const boost::program_options::variable_value& varValue)
64 auto& value = varValue.value();
65 std::ostringstream ostr;
66 if (
auto q = boost::any_cast<T>(&value))
70 std::string valueStr = ostr.str();
76 inline std::string ConvertVariableValueToString<std::string>(
const boost::program_options::variable_value& varValue)
78 auto& value = varValue.value();
80 if (
auto q = boost::any_cast<std::string>(&value))
89 inline std::string ConvertVariableValueToString<boost::filesystem::path>(
const boost::program_options::variable_value& varValue)
91 auto& value = varValue.value();
93 if (
auto q = boost::any_cast<boost::filesystem::path>(&value))
95 valueStr = (*q).string();
103 using returned_type = std::string;
106 std::string Value(
const boost::program_options::variable_value& varValue,
const std::string&,
const std::string&,
const std::string&)
108 return ConvertVariableValueToString<T>(varValue);
111 returned_type DefaultValue(
const std::string&,
const std::string&)
113 return std::string(
"empty value");
123 returned_type Value(
const boost::program_options::variable_value& varValue,
const std::string& type,
const std::string& defaulted,
const std::string& empty)
125 std::string valueStr = ConvertVariableValueToString<T>(varValue);
129 returned_type DefaultValue(
const std::string& defaulted,
const std::string& empty)
131 return fair::mq::VarValInfo{std::string(
"Unknown value"), std::string(
" [Unknown]"), defaulted, empty};
139 auto operator()(
const boost::program_options::variable_value& varValue) ->
typename T::returned_type
141 std::string defaulted;
144 if (varValue.empty())
150 if (varValue.defaulted())
152 defaulted =
" [default]";
156 defaulted =
" [provided]";
160 if (typeIs<std::string>(varValue))
161 return T::template Value<std::string>(varValue, std::string(
"<string>"), defaulted, empty);
163 if (typeIs<std::vector<std::string>>(varValue))
164 return T::template Value<std::vector<std::string>>(varValue, std::string(
"<vector<string>>"), defaulted, empty);
166 if (typeIs<int>(varValue))
167 return T::template Value<int>(varValue, std::string(
"<int>"), defaulted, empty);
169 if (typeIs<std::vector<int>>(varValue))
170 return T::template Value<std::vector<int>>(varValue, std::string(
"<vector<int>>"), defaulted, empty);
172 if (typeIs<float>(varValue))
173 return T::template Value<float>(varValue, std::string(
"<float>"), defaulted, empty);
175 if (typeIs<std::vector<float>>(varValue))
176 return T::template Value<std::vector<float>>(varValue, std::string(
"<vector<float>>"), defaulted, empty);
178 if (typeIs<double>(varValue))
179 return T::template Value<double>(varValue, std::string(
"<double>"), defaulted, empty);
181 if (typeIs<std::vector<double>>(varValue))
182 return T::template Value<std::vector<double>>(varValue, std::string(
"<vector<double>>"), defaulted, empty);
184 if (typeIs<short>(varValue))
185 return T::template Value<short>(varValue, std::string(
"<short>"), defaulted, empty);
187 if (typeIs<std::vector<short>>(varValue))
188 return T::template Value<std::vector<short>>(varValue, std::string(
"<vector<short>>"), defaulted, empty);
190 if (typeIs<long>(varValue))
191 return T::template Value<long>(varValue, std::string(
"<long>"), defaulted, empty);
193 if (typeIs<std::vector<long>>(varValue))
194 return T::template Value<std::vector<long>>(varValue, std::string(
"<vector<long>>"), defaulted, empty);
196 if (typeIs<std::size_t>(varValue))
197 return T::template Value<std::size_t>(varValue, std::string(
"<std::size_t>"), defaulted, empty);
199 if (typeIs<std::vector<std::size_t>>(varValue))
200 return T::template Value<std::vector<std::size_t>>(varValue, std::string(
"<vector<std::size_t>>"), defaulted, empty);
202 if (typeIs<std::uint32_t>(varValue))
203 return T::template Value<std::uint32_t>(varValue, std::string(
"<std::uint32_t>"), defaulted, empty);
205 if (typeIs<std::vector<std::uint32_t>>(varValue))
206 return T::template Value<std::vector<std::uint32_t>>(varValue, std::string(
"<vector<std::uint32_t>>"), defaulted, empty);
208 if (typeIs<std::uint64_t>(varValue))
209 return T::template Value<std::uint64_t>(varValue, std::string(
"<std::uint64_t>"), defaulted, empty);
211 if (typeIs<std::vector<std::uint64_t>>(varValue))
212 return T::template Value<std::vector<std::uint64_t>>(varValue, std::string(
"<vector<std::uint64_t>>"), defaulted, empty);
214 if (typeIs<bool>(varValue))
215 return T::template Value<bool>(varValue, std::string(
"<bool>"), defaulted, empty);
217 if (typeIs<std::vector<bool>>(varValue))
218 return T::template Value<std::vector<bool>>(varValue, std::string(
"<vector<bool>>"), defaulted, empty);
220 if (typeIs<boost::filesystem::path>(varValue))
221 return T::template Value<boost::filesystem::path>(varValue, std::string(
"<boost::filesystem::path>"), defaulted, empty);
224 return T::DefaultValue(defaulted, empty);
Definition: FairProgOptionsHelper.h:32
Definition: FairProgOptionsHelper.h:118
Definition: DeviceRunner.h:23
Definition: FairProgOptionsHelper.h:101
Definition: FairProgOptionsHelper.h:137