16 #include <boost/lexical_cast.hpp>
21 namespace ns_namevalue
26 template <
class t_NameValuePair>
51 template <
class t_NameValuePair>
75 if (index_ == name_value_pairs_->size())
77 name_value_pairs_->resize(name_value_pairs_->size() + 1);
84 name_value_pairs_->reserve(reserve_);
89 name_value_pairs_->clear();
96 name_value_pairs_ = &buffer_name_value_pairs_;
100 expandReserve(reserve);
106 explicit GenericWriter(std::vector<t_NameValuePair> *name_value_pairs,
const std::size_t reserve = 0)
108 name_value_pairs_ = name_value_pairs;
112 expandReserve(reserve);
123 void reset(
const bool initialize_structure =
true)
125 if (
true == initialize_structure)
129 initialize_structure_ = initialize_structure;
137 if (
true == initialize_structure_)
139 expandReserve(num_entries);
145 if (
true == initialize_structure_)
147 if (0 == node_stack_.size())
149 node_stack_.push_back(map_name);
153 if (
true == node_stack_.back().isArray())
155 std::string node = node_stack_.back().node_;
157 node += boost::lexical_cast<std::string>(node_stack_.back().index_);
160 node_stack_.push_back(node);
164 node_stack_.push_back(node_stack_.back().node_ +
"." + map_name);
172 if (
true == initialize_structure_)
174 node_stack_.pop_back();
188 virtual void startArray(
const std::size_t size,
const bool =
false)
190 if (
true == initialize_structure_)
193 if (
true == node_stack_.back().isArray())
195 std::string node = node_stack_.back().node_;
197 node += boost::lexical_cast<std::string>(node_stack_.back().index_);
202 node_stack_.push_back(
NodeWrapper(node_stack_.back().node_, 0, size));
209 if (
true == initialize_structure_)
211 ARILES2_ASSERT(
true == node_stack_.back().isArray(),
"Internal error: array expected.");
212 ++node_stack_.back().index_;
218 if (
true == initialize_structure_)
220 node_stack_.pop_back();
225 #define ARILES2_BASIC_TYPE(type) \
226 void writeElement(const type &element, const Parameters &) \
229 if (true == initialize_structure_) \
231 NameValuePairHandler<t_NameValuePair>::name((*name_value_pairs_)[index_]) = node_stack_.back().node_; \
232 if (true == node_stack_.back().isArray()) \
234 NameValuePairHandler<t_NameValuePair>::name((*name_value_pairs_)[index_]) += "_"; \
235 NameValuePairHandler<t_NameValuePair>::name((*name_value_pairs_)[index_]) += \
236 boost::lexical_cast<std::string>(node_stack_.back().index_); \
239 NameValuePairHandler<t_NameValuePair>::value((*name_value_pairs_)[index_]) = element; \
245 #undef ARILES2_BASIC_TYPE
248 void writeElement(
const std::string & ,
const Parameters &)