libsesstype  2.0.0
Library for Session Types programming.
allreduce.h
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__
 All Classes Namespaces Files Functions