![]() |
libsesstype
2.0.0
Library for Session Types programming.
|
00001 #ifndef SESSTYPE__PARAMETERIED__NODE__ALLREDUCE__H__ 00002 #define SESSTYPE__PARAMETERIED__NODE__ALLREDUCE__H__ 00003 00004 #include "sesstype/util/visitor_tmpl.h" 00005 00006 #include "sesstype/parameterised/msg.h" 00007 #include "sesstype/parameterised/role.h" 00008 #include "sesstype/parameterised/node.h" 00009 00010 #ifdef __cplusplus 00011 namespace sesstype { 00012 namespace parameterised { 00013 #endif 00014 00015 #ifdef __cplusplus 00016 00019 template <class BaseNode, class RoleType, class MessageType, class VisitorType> 00020 class AllReduceNodeTmpl : public BaseNode { 00021 MsgSig *msg_; 00022 00023 public: 00025 AllReduceNodeTmpl() 00026 : BaseNode(ST_NODE_ALLREDUCE), msg_(new MessageType("")) { } 00027 00030 AllReduceNodeTmpl(MessageType *msg) 00031 : BaseNode(ST_NODE_ALLREDUCE), msg_(msg) { } 00032 00034 AllReduceNodeTmpl(const AllReduceNodeTmpl &node) 00035 : Node(ST_NODE_ALLREDUCE), msg_(node.msg_) { } 00036 00038 AllReduceNodeTmpl *clone() const override 00039 { 00040 return new AllReduceNodeTmpl(*this); 00041 } 00042 00045 void set_msg(MessageType *msg) 00046 { 00047 msg_ = msg; 00048 } 00049 00051 MessageType *msg() const 00052 { 00053 return msg_; 00054 } 00055 00056 virtual void accept(VisitorType &v) override; 00057 }; 00058 00059 using AllReduceNode = AllReduceNodeTmpl<Node, Role, MsgSig, util::NodeVisitor>; 00060 #endif // __cplusplus 00061 00062 #ifdef __cplusplus 00063 extern "C" { 00064 #endif 00065 00066 st_node *st_mk_allreduce_node_init(); 00067 00068 st_node *st_mk_allreduce_node(st_msg *msg); 00069 00070 st_node *st_allreduce_node_set_msgsig(st_node *const node, st_msg *msg); 00071 00072 st_msg *st_allreduce_node_get_msgsig(st_node *const node); 00073 00074 #ifdef __cplusplus 00075 } // extern "C" 00076 #endif 00077 00078 #ifdef __cplusplus 00079 } // namespace parameterised 00080 } // namespace sesstype 00081 #endif 00082 00083 #endif//SESSTYPE__PARAMETERIED__NODE__ALLREDUCE__H__