16 #include <boost/lexical_cast.hpp> 51 *output_stream_ << std::setprecision(std::numeric_limits<double>::digits10);
56 explicit Writer(
const std::string &file_name)
59 output_stream_ = &config_ofs_;
63 explicit Writer(std::ostream &output_stream)
65 output_stream_ = &output_stream;
98 impl_->output_stream_->flush();
105 if (0 ==
impl_->node_stack_.size())
107 impl_->node_stack_.push_back(map_name);
111 if (
true ==
impl_->node_stack_.back().isArray())
113 std::string node =
impl_->node_stack_.back().node_;
115 node += boost::lexical_cast<std::string>(
impl_->node_stack_.back().index_ + 1);
122 impl_->node_stack_.push_back(
impl_->node_stack_.back().node_ +
"." + map_name);
129 impl_->node_stack_.pop_back();
135 if (
true ==
impl_->node_stack_.back().isArray())
137 std::string node =
impl_->node_stack_.back().node_;
139 node += boost::lexical_cast<std::string>(
impl_->node_stack_.back().index_ + 1);
151 ARILES_ASSERT(
true ==
impl_->node_stack_.back().isArray(),
"Internal error: array expected.");
152 ++
impl_->node_stack_.back().index_;
157 impl_->node_stack_.pop_back();
163 std::string node =
impl_->node_stack_.back().node_;
174 *
impl_->output_stream_ <<
impl_->node_stack_.back().node_;
179 impl_->node_stack_.back().index_ = 0;
184 if (
impl_->node_stack_.back().isCompact())
186 *
impl_->output_stream_ <<
"; ";
190 *
impl_->output_stream_ <<
"; ...\n";
196 *
impl_->output_stream_ <<
"];\n";
197 impl_->node_stack_.pop_back();
201 #define ARILES_BASIC_TYPE(type) \ 202 void Writer::writeElement(const type &element) \ 204 if (true == impl_->node_stack_.back().isMatrix()) \ 206 if (0 != impl_->node_stack_.back().index_) \ 208 *impl_->output_stream_ << ", "; \ 210 *impl_->output_stream_ << element; \ 211 ++impl_->node_stack_.back().index_; \ 215 *impl_->output_stream_ << impl_->node_stack_.back().node_; \ 216 if (true == impl_->node_stack_.back().isArray()) \ 218 *impl_->output_stream_ << "{" << impl_->node_stack_.back().index_ + 1 << "}"; \ 220 *impl_->output_stream_ << " = " << element << ";\n"; \ 226 #undef ARILES_BASIC_TYPE 229 void Writer::writeElement(
const std::string &element)
231 *
impl_->output_stream_ <<
impl_->node_stack_.back().node_;
232 if (
true ==
impl_->node_stack_.back().isArray())
234 *
impl_->output_stream_ <<
"{" <<
impl_->node_stack_.back().index_ + 1 <<
"}";
236 *
impl_->output_stream_ <<
" = '" << element <<
"';\n";
Writer(const std::string &file_name)
void flush()
Flush the configuration to the output.
ARILES_SHARED_PTR< impl::Writer > ImplPtr
void initEmitter()
Initialize emitter.
static void openFile(std::ofstream &config_ofs, const std::string &file_name)
open configuration file
void descend(const std::string &map_name)
Starts a nested map in the configuration file.
void startArray(const std::size_t size, const bool compact=false)
Writer(const std::string &file_name)
std::ofstream config_ofs_
output file stream
ARILES_MACRO_SUBSTITUTE(ARILES_BASIC_NUMERIC_TYPES_LIST) void Writer
ariles::Node< std::string > NodeWrapper
Writer(std::ostream &output_stream)
void startMatrix(const bool compact=false)
std::vector< NodeWrapper > node_stack_
#define ARILES_BASIC_NUMERIC_TYPES_LIST
const serialization::Features & getSerializationFeatures() const
#define ARILES_VISIBILITY_ATTRIBUTE
std::ostream * output_stream_
output stream