17 #include <boost/lexical_cast.hpp>
44 const std::string &node,
45 const std::string &label,
54 const std::string &node,
55 const std::string &label,
56 const std::size_t index,
57 const std::size_t size)
58 :
Base(node, index, size)
84 template <
class... t_Args>
103 CPPUT_ASSERT(0 < stack_size,
"Internal error: stack must contain at least 2 entries.");
106 back().actual_id_ = node_options.
id_;
112 if (not node_options.
label_.empty())
116 if (not node_options.
options_.empty())
129 <<
back().actual_id_ <<
";\n";
140 namespace ns_graphviz
156 impl_->output_stream_->flush();
164 impl_->parameters_ = ¶meters;
167 impl_->emplace(
"ariles");
171 impl_->emplace(name);
173 *
impl_->output_stream_
174 <<
"digraph graph_" <<
impl_->back().node_
176 << parameters.graph_options_;
183 *
impl_->output_stream_ <<
"}\n";
188 if (
impl_->back().isArray())
190 return (
impl_->back().node_ +
"_" + boost::lexical_cast<std::string>(
impl_->back().index_));
192 return (
impl_->back().node_);
197 if (
impl_->back().isArray())
199 return (
impl_->back().label_ +
"_" + boost::lexical_cast<std::string>(
impl_->back().index_));
201 return (
impl_->back().label_);
207 if (not
impl_->parameters_->override_parameters_)
209 impl_->parameters_ = ¶meters;
211 impl_->writeNodeAndConnection(node_options);
217 if (not
impl_->parameters_->override_parameters_)
219 impl_->parameters_ = ¶meters;
221 impl_->writeNodeAndConnection(
228 if (
impl_->back().isArray())
231 impl_->concatWithNode(
233 boost::lexical_cast<std::string>(
impl_->back().index_),
256 if (size > 0 || not compact)
258 impl_->writeNodeAndConnection(
262 if (
impl_->back().isArray())
264 const std::string index = boost::lexical_cast<std::string>(
impl_->back().index_);
266 impl_->concatWithNode(
impl_->separator_, index),
289 #define ARILES2_BASIC_TYPE(type) \
290 void Visitor::writeElement(const type &, const Parameters &) \
292 impl_->writeNodeAndConnection( \
293 impl_->parameters_->getDefaultNodeOptions(getDefaultNodeId(), getDefaultNodeLabel())); \
299 #undef ARILES2_BASIC_TYPE
NodeWrapper(const std::string &node, const std::string &label, const std::size_t index, const std::size_t size)
NodeWrapper(const std::string &node, const std::string &label, const Base::Type type=Base::Type::GENERIC)
NodeWrapper(const std::string &node, const Base::Type type=Base::Type::GENERIC)
std::string getDefaultNodeId() const
std::string getDefaultNodeLabel() const
void startRoot(const std::string &name, const Parameters &)
void startMap(const Parameters &, const Parameters::NodeOptions &)
void startMapEntry(const std::string &map_name)
Starts a nested map in the configuration file.
void flush()
Flush the configuration to the output.
void startArray(const std::size_t size, const bool compact=false)
void endRoot(const std::string &name)
std::set< std::string > all_ids_
Visitor(t_Args &&...args)
const Parameters * parameters_
const std::string separator_
void writeNodeAndConnection(const Parameters::NodeOptions &node_options)
std::vector< NodeWrapper > node_stack_
void makeImplPtr(t_Args &&...args)
std::ostream * output_stream_
output stream
FileVisitorImplementation(const std::string &file_name)
#define CPPUT_ASSERT(condition,...)
#define ARILES2_COMPLEX_NUMBER_TYPES_LIST
#define ARILES2_BASIC_TYPES_LIST
#define CPPUT_MACRO_SUBSTITUTE(macro)
std::string simple(t_String &&...strings)
#define CPPUT_TRACE_FUNCTION