16 #include <boost/lexical_cast.hpp>
52 *output_stream_ << std::setprecision(std::numeric_limits<double>::digits10);
57 explicit Writer(
const std::string &file_name)
60 output_stream_ = &config_ofs_;
64 explicit Writer(std::ostream &output_stream)
66 output_stream_ = &output_stream;
70 template <
typename t_Scalar>
73 if (
true == node_stack_.back().isMatrix())
75 *output_stream_ << element.real() <<
" + " << element.imag() <<
"i";
79 *output_stream_ << node_stack_.back().node_;
80 if (
true == node_stack_.back().isArray())
82 *output_stream_ <<
"{" << node_stack_.back().index_ + 1 <<
"}";
84 *output_stream_ <<
" = " << element.real() <<
" + " << element.imag() <<
"i"
111 impl_->output_stream_->flush();
118 if (
impl_->node_stack_.empty())
124 if (
true ==
impl_->node_stack_.back().isArray())
126 std::string node =
impl_->node_stack_.back().node_;
128 node += boost::lexical_cast<std::string>(
impl_->node_stack_.back().index_ + 1);
142 impl_->node_stack_.pop_back();
148 if (
true ==
impl_->node_stack_.back().isArray())
150 std::string node =
impl_->node_stack_.back().node_;
152 node += boost::lexical_cast<std::string>(
impl_->node_stack_.back().index_ + 1);
164 ARILES2_ASSERT(
true ==
impl_->node_stack_.back().isArray(),
"Internal error: array expected.");
165 ++
impl_->node_stack_.back().index_;
170 impl_->node_stack_.pop_back();
177 *
impl_->output_stream_ <<
impl_->node_stack_.back().node_;
186 *
impl_->output_stream_ <<
"; ";
191 *
impl_->output_stream_ <<
"];\n";
192 impl_->node_stack_.pop_back();
202 impl_->node_stack_.push_back(
204 *
impl_->output_stream_ <<
impl_->node_stack_.back().node_;
209 impl_->node_stack_.back().index_ = 0;
214 if (0 !=
impl_->node_stack_.back().index_)
216 *
impl_->output_stream_ <<
", ";
222 ++
impl_->node_stack_.back().index_;
227 *
impl_->output_stream_ <<
"; ...\n";
232 *
impl_->output_stream_ <<
"];\n";
233 impl_->node_stack_.pop_back();
237 #define ARILES2_BASIC_TYPE(type) \
238 void Writer::writeElement(const type &element, const Parameters &) \
240 if (true == impl_->node_stack_.back().isMatrix()) \
242 *impl_->output_stream_ << element; \
246 *impl_->output_stream_ << impl_->node_stack_.back().node_; \
247 if (true == impl_->node_stack_.back().isArray()) \
249 *impl_->output_stream_ << "{" << impl_->node_stack_.back().index_ + 1 << "}"; \
251 *impl_->output_stream_ << " = " << element << ";\n"; \
257 #undef ARILES2_BASIC_TYPE
262 *
impl_->output_stream_ <<
impl_->node_stack_.back().node_;
263 if (
true ==
impl_->node_stack_.back().isArray())
265 *
impl_->output_stream_ <<
"{" <<
impl_->node_stack_.back().index_ + 1 <<
"}";
267 *
impl_->output_stream_ <<
" = '" << element <<
"';\n";
272 impl_->writeComplex(element);
277 impl_->writeComplex(element);