![]() |
libsesstype
2.0.0
Library for Session Types programming.
|
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__