16 #include <boost/lexical_cast.hpp>
48 *
output_stream_ << std::setprecision(std::numeric_limits<double>::digits10);
53 template <
class... t_Args>
59 template <
typename t_Scalar>
62 if (
back().isMatrix())
64 *
output_stream_ << element.real() <<
" + " << element.imag() <<
"i";
73 *
output_stream_ <<
" = " << element.real() <<
" + " << element.imag() <<
"i"
100 impl_->output_stream_->flush();
109 impl_->emplace(map_name);
113 if (
impl_->back().isArray())
115 impl_->concatWithNodeAndEmplace(
116 impl_->bracket_left_,
117 boost::lexical_cast<std::string>(
impl_->back().index_ + 1),
118 impl_->bracket_right_,
124 impl_->concatWithNodeAndEmplace(
impl_->separator_, map_name);
137 if (
impl_->back().isArray())
140 impl_->concatWithNode(
141 impl_->bracket_left_,
142 boost::lexical_cast<std::string>(
impl_->back().index_ + 1),
143 impl_->bracket_right_),
166 impl_->emplace(
impl_->back().node_ +
" = [", NodeWrapper::Type::MATRIX);
167 *
impl_->output_stream_ <<
impl_->back().node_;
176 *
impl_->output_stream_ <<
"; ";
181 *
impl_->output_stream_ <<
"];\n";
192 impl_->emplace(
impl_->back().node_ +
" = [...\n", NodeWrapper::Type::MATRIX);
193 *
impl_->output_stream_ <<
impl_->back().node_;
198 impl_->back().index_ = 0;
203 if (0 !=
impl_->back().index_)
205 *
impl_->output_stream_ <<
", ";
211 ++
impl_->back().index_;
216 *
impl_->output_stream_ <<
"; ...\n";
221 *
impl_->output_stream_ <<
"];\n";
226 #define ARILES2_BASIC_TYPE(type) \
227 void Writer::writeElement(const type &element, const Parameters &) \
229 if (impl_->back().isMatrix()) \
231 *impl_->output_stream_ << element; \
235 *impl_->output_stream_ << impl_->back().node_; \
236 if (impl_->back().isArray()) \
238 *impl_->output_stream_ << "{" << impl_->back().index_ + 1 << "}"; \
240 *impl_->output_stream_ << " = " << element << ";\n"; \
246 #undef ARILES2_BASIC_TYPE
251 *
impl_->output_stream_ <<
impl_->back().node_;
252 if (
impl_->back().isArray())
254 *
impl_->output_stream_ <<
"{" <<
impl_->back().index_ + 1 <<
"}";
256 *
impl_->output_stream_ <<
" = '" << element <<
"';\n";
261 impl_->writeComplex(element);
266 impl_->writeComplex(element);
void startMatrix(const bool dynamic, const std::size_t cols, const std::size_t rows, const Parameters ¶m)
void startMatrixElement()
void startMatrixRow(const std::size_t, const Parameters &)
void flush()
Flush the configuration to the output.
void startArray(const std::size_t size, const bool compact=false)
void startVector(const std::size_t size)
void startMapEntry(const std::string &map_name)
Starts a nested map in the configuration file.
void startVectorElement()
void endMatrixRow(const Parameters &)
Writer(const std::string &file_name)
void endMatrix(const bool dynamic, const Parameters &)
void writeComplex(const std::complex< t_Scalar > &element)
const std::string bracket_right_
void initEmitter() const
Initialize emitter.
const std::string separator_
const std::string bracket_left_
void makeImplPtr(t_Args &&...args)
std::ostream * output_stream_
output stream
FileVisitorImplementation(const std::string &file_name)
void writeElement(const std::complex< t_Scalar > &entry, const Parameters ¶m)
#define ARILES2_BASIC_NUMERIC_TYPES_LIST
visitor::Parameters Parameters
CPPUT_MACRO_SUBSTITUTE(ARILES2_BASIC_NUMERIC_TYPES_LIST) void Writer