|
11 | 11 |
|
12 | 12 | #include "PropertyTreeHelpers.h" |
13 | 13 | #include "Framework/ConfigParamSpec.h" |
14 | | -#include "Framework/VariantStringHelpers.h" |
15 | 14 | #include "Framework/VariantPropertyTreeHelpers.h" |
16 | 15 | #include "Framework/RuntimeError.h" |
| 16 | +#include "Framework/VariantJSONHelpers.h" |
17 | 17 |
|
18 | 18 | #include <boost/program_options/variables_map.hpp> |
19 | 19 |
|
|
22 | 22 |
|
23 | 23 | namespace o2::framework |
24 | 24 | { |
25 | | - |
| 25 | +namespace |
| 26 | +{ |
| 27 | +/// Helper to get a Variant from a @a str |
| 28 | +template <VariantType T> |
| 29 | +inline Variant fromString(std::string const& str) |
| 30 | +{ |
| 31 | + std::stringstream ss; |
| 32 | + ss.str(str); |
| 33 | + return VariantJSONHelpers::read<T>(ss); |
| 34 | +} |
| 35 | +} // namespace |
26 | 36 | void PropertyTreeHelpers::populateDefaults(std::vector<ConfigParamSpec> const& schema, |
27 | 37 | boost::property_tree::ptree& pt, |
28 | 38 | boost::property_tree::ptree& provenance) |
@@ -176,30 +186,53 @@ void PropertyTreeHelpers::populate(std::vector<ConfigParamSpec> const& schema, |
176 | 186 | case VariantType::Bool: |
177 | 187 | pt.put(key, vmap[key].as<bool>()); |
178 | 188 | break; |
179 | | - case VariantType::ArrayInt: |
180 | | - pt.put_child(key, vectorToBranch<int>(stringToVector<int>(vmap[key].as<std::string>()))); |
181 | | - break; |
182 | | - case VariantType::ArrayFloat: |
183 | | - pt.put_child(key, vectorToBranch<float>(stringToVector<float>(vmap[key].as<std::string>()))); |
184 | | - break; |
185 | | - case VariantType::ArrayDouble: |
186 | | - pt.put_child(key, vectorToBranch<double>(stringToVector<double>(vmap[key].as<std::string>()))); |
187 | | - break; |
| 189 | + case VariantType::ArrayInt: { |
| 190 | + auto v = fromString<VariantType::ArrayInt>(vmap[key].as<std::string>()); |
| 191 | + pt.put_child(key, vectorToBranch<int>(v.get<int*>(), v.size())); |
| 192 | + } break; |
| 193 | + case VariantType::ArrayFloat: { |
| 194 | + auto v = fromString<VariantType::ArrayFloat>(vmap[key].as<std::string>()); |
| 195 | + pt.put_child(key, vectorToBranch<float>(v.get<float*>(), v.size())); |
| 196 | + } break; |
| 197 | + case VariantType::ArrayDouble: { |
| 198 | + auto v = fromString<VariantType::ArrayDouble>(vmap[key].as<std::string>()); |
| 199 | + pt.put_child(key, vectorToBranch<double>(v.get<double*>(), v.size())); |
| 200 | + } break; |
188 | 201 | case VariantType::ArrayBool: |
189 | 202 | // pt.put_child(key, vectorToBranch<bool>(stringToVector<bool>(vmap[key].as<std::string>()))); |
190 | 203 | break; |
191 | | - case VariantType::ArrayString: |
192 | | - pt.put_child(key, vectorToBranch<std::string>(stringToVector<std::string>(vmap[key].as<std::string>()))); |
193 | | - break; |
194 | | - case VariantType::Array2DInt: |
195 | | - pt.put_child(key, array2DToBranch<int>(stringToArray2D<int>(vmap[key].as<std::string>()))); |
196 | | - break; |
197 | | - case VariantType::Array2DFloat: |
198 | | - pt.put_child(key, array2DToBranch<float>(stringToArray2D<float>(vmap[key].as<std::string>()))); |
199 | | - break; |
200 | | - case VariantType::Array2DDouble: |
201 | | - pt.put_child(key, array2DToBranch<double>(stringToArray2D<double>(vmap[key].as<std::string>()))); |
202 | | - break; |
| 204 | + case VariantType::ArrayString: { |
| 205 | + auto v = fromString<VariantType::ArrayString>(vmap[key].as<std::string>()); |
| 206 | + pt.put_child(key, vectorToBranch<std::string>(v.get<std::string*>(), v.size())); |
| 207 | + } break; |
| 208 | + case VariantType::Array2DInt: { |
| 209 | + auto v = fromString<VariantType::Array2DInt>(vmap[key].as<std::string>()); |
| 210 | + pt.put_child(key, array2DToBranch<int>(v.get<Array2D<int>>())); |
| 211 | + } break; |
| 212 | + case VariantType::Array2DFloat: { |
| 213 | + auto v = fromString<VariantType::Array2DFloat>(vmap[key].as<std::string>()); |
| 214 | + pt.put_child(key, array2DToBranch<float>(v.get<Array2D<float>>())); |
| 215 | + } break; |
| 216 | + case VariantType::Array2DDouble: { |
| 217 | + auto v = fromString<VariantType::Array2DDouble>(vmap[key].as<std::string>()); |
| 218 | + pt.put_child(key, array2DToBranch<double>(v.get<Array2D<double>>())); |
| 219 | + } break; |
| 220 | + case VariantType::LabeledArrayInt: { |
| 221 | + auto v = fromString<VariantType::LabeledArrayInt>(vmap[key].as<std::string>()); |
| 222 | + pt.put_child(key, labeledArrayToBranch(v.get<LabeledArray<int>>())); |
| 223 | + } break; |
| 224 | + case VariantType::LabeledArrayFloat: { |
| 225 | + auto v = fromString<VariantType::LabeledArrayFloat>(vmap[key].as<std::string>()); |
| 226 | + pt.put_child(key, labeledArrayToBranch(v.get<LabeledArray<float>>())); |
| 227 | + } break; |
| 228 | + case VariantType::LabeledArrayDouble: { |
| 229 | + auto v = fromString<VariantType::LabeledArrayDouble>(vmap[key].as<std::string>()); |
| 230 | + pt.put_child(key, labeledArrayToBranch(v.get<LabeledArray<double>>())); |
| 231 | + } break; |
| 232 | + case VariantType::LabeledArrayString: { |
| 233 | + auto v = fromString<VariantType::LabeledArrayString>(vmap[key].as<std::string>()); |
| 234 | + pt.put_child(key, labeledArrayToBranch(v.get<LabeledArray<std::string>>())); |
| 235 | + } break; |
203 | 236 | case VariantType::Dict: |
204 | 237 | pt.put_child(key, vmap[key].as<boost::property_tree::ptree>()); |
205 | 238 | break; |
|
0 commit comments