28 #include <boost/iterator/transform_iterator.hpp> 29 #include <boost/property_tree/ptree.hpp> 40 template <
class T,
class Ptree>
41 struct pair2data :
public std::unary_function<const typename Ptree::value_type, T>
43 T
operator()(
const typename Ptree::value_type& pair)
const {
return pair.second.template get_value<T>(); }
48 template <
class Sequence>
49 Sequence
ToSequence(
const boost::property_tree::ptree& ptree)
53 using Iterator = boost::iterators::transform_iterator<Concrete_pair2data, bpt::ptree::const_iterator>;
55 const Iterator begin(ptree.begin(), Concrete_pair2data());
56 const Iterator end(ptree.end(), Concrete_pair2data());
57 return Sequence(begin, end);
60 template <
class T, std::
size_t N>
61 std::array<T, N>
ToArray(
const boost::property_tree::ptree& ptree)
65 using Iterator = boost::iterators::transform_iterator<Concrete_pair2data, bpt::ptree::const_iterator>;
67 if (ptree.size() != N) {
68 throw std::range_error(
"Array size error.");
70 const Iterator begin(ptree.begin(), Concrete_pair2data());
71 const Iterator end(ptree.end(), Concrete_pair2data());
72 std::array<T, N> tmpArray;
73 std::copy(begin, end, tmpArray.begin());
77 template <
class Ptree>
78 Ptree
Merge(
const Ptree& pt1,
const Ptree& pt2)
81 for (
const typename Ptree::value_type& v : pt1) {
82 result.add_child(v.first, v.second);
84 for (
const typename Ptree::value_type& v : pt2) {
85 result.add_child(v.first, v.second);
Sequence ToSequence(const boost::property_tree::ptree &ptree)
Ptree Merge(const Ptree &pt1, const Ptree &pt2)
std::array< T, N > ToArray(const boost::property_tree::ptree &ptree)
Namespace for the simulator and related classes.
T operator()(const typename Ptree::value_type &pair) const