libsesstype  2.0.0
Library for Session Types programming.
interaction.h
00001 #ifndef SESSTYPE__PARAMETERISED__NODE__INTERACTION__H__
00002 #define SESSTYPE__PARAMETERISED__NODE__INTERACTION__H__
00003 
00004 #include "sesstype/node/interaction.h"
00005 #include "sesstype/util/visitor_tmpl.h"
00006 
00007 #include "sesstype/parameterised/msg.h"
00008 #include "sesstype/parameterised/cond.h"
00009 #include "sesstype/parameterised/role.h"
00010 #include "sesstype/parameterised/node.h"
00011 
00012 #ifdef __cplusplus
00013 namespace sesstype {
00014 namespace parameterised {
00015 #endif
00016 
00017 #ifdef __cplusplus
00018 
00021 class InteractionNode
00022     : public sesstype::InteractionNodeTmpl<Node, Role, MsgSig, util::NodeVisitor> {
00023     MsgCond *cond_;
00024 
00025   public:
00026     InteractionNode()
00027         : InteractionNodeTmpl<Node, Role, MsgSig, util::NodeVisitor>(),
00028           cond_(nullptr) { }
00029 
00030     InteractionNode(MsgSig *msg)
00031         : InteractionNodeTmpl<Node, Role, MsgSig, util::NodeVisitor>(msg),
00032           cond_(nullptr) { }
00033 
00034     InteractionNode(const InteractionNode &node)
00035         : sesstype::InteractionNodeTmpl<Node, Role, MsgSig, util::NodeVisitor>(node),
00036           cond_(node.cond_ ? node.cond_->clone() : nullptr) { }
00037 
00038     InteractionNode *clone() const override
00039     {
00040         return new InteractionNode(*this);
00041     }
00042 
00044     MsgCond *cond() const
00045     {
00046         return cond_;
00047     }
00048 
00051     void set_cond(MsgCond *cond)
00052     {
00053         if (cond_ != nullptr) {
00054             delete cond_;
00055         }
00056         cond_ = cond;
00057     }
00058 
00059     virtual void accept(util::NodeVisitor &v) override;
00060 };
00061 #endif // __cplusplus
00062 
00063 #ifdef __cplusplus
00064 extern "C" {
00065 #endif
00066 
00067 st_node *st_mk_param_interaction_node_init();
00068 
00069 st_node *st_mk_param_interaction_node(st_msg *msg);
00070 
00071 st_node *st_param_interaction_node_set_cond(st_node *const node, st_cond *cond);
00072 
00073 st_cond *st_param_interaction_node_get_cond(st_node *const node);
00074 
00075 #ifdef __cplusplus
00076 } // extern "C"
00077 #endif
00078 
00079 #ifdef __cplusplus
00080 } // namespace parameterised
00081 } // namespace sesstype
00082 #endif
00083 
00084 #endif//SESSTYPE__PARAMETERISED__NODE__INTERACTION__H__
 All Classes Namespaces Files Functions