#include #include #include namespace ggraph { static inline std::unordered_set> create_attributes() { std::unordered_set> attributes; attributes.insert(std::make_unique("width", 50)); attributes.insert(std::make_unique("height", 50)); attributes.insert(std::make_unique("shape", "roundrectangle")); attributes.insert(std::make_unique("type", "forkjoin")); attributes.insert(std::make_unique("ngrains", std::nan(""))); attributes.insert(std::make_unique("nmembers", std::nan(""))); attributes.insert(std::make_unique("work_cycles", std::nan(""))); attributes.insert(std::make_unique("exec_cycles", std::nan(""))); attributes.insert(std::make_unique("parallel_benefit", std::nan(""))); attributes.insert(std::make_unique("work_deviation", std::nan(""))); attributes.insert(std::make_unique("mem_hier_util", std::nan(""))); attributes.insert(std::make_unique("inst_par_min", std::nan(""))); attributes.insert(std::make_unique("inst_par_median", std::nan(""))); attributes.insert(std::make_unique("inst_par_max", std::nan(""))); attributes.insert(std::make_unique("sibling_scatter", std::nan(""))); attributes.insert(std::make_unique("sibling_work_balance", std::nan(""))); attributes.insert(std::make_unique("chunk_work_balance", std::nan(""))); attributes.insert(std::make_unique("problematic", std::nan(""))); attributes.insert(std::make_unique("on_crit_path", std::nan(""))); attributes.insert(std::make_unique("group_realizer")); return attributes; } forkjoin::~forkjoin() {} forkjoin::forkjoin(const ggraph::fork & fork, const ggraph::join & join) : operation(create_attributes()) , fork_(fork) , join_(join) {} std::string forkjoin::debug_string() const { return strfmt(fork().debug_string(), "/", join().debug_string()); } std::unique_ptr forkjoin::copy() const { return std::unique_ptr(new forkjoin(*this)); } }