![]() |
libsesstype
2.0.0
Library for Session Types programming.
|
00001 #ifndef SESSTYPE__PARAMETERISED__NODE__IF_H__ 00002 #define SESSTYPE__PARAMETERISED__NODE__IF_H__ 00003 00004 #include "sesstype/node/block.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 00013 #ifdef __cplusplus 00014 namespace sesstype { 00015 namespace parameterised { 00016 #endif 00017 00018 #ifdef __cplusplus 00019 00022 template <class BaseNode, class RoleType, class MessageType, class VisitorType> 00023 class IfNodeTmpl : public BlockNodeTmpl<BaseNode, RoleType, MessageType, VisitorType> { 00024 MsgCond *cond_; 00025 00026 public: 00029 IfNodeTmpl(MsgCond *cond) 00030 : BlockNodeTmpl<BaseNode, RoleType, MessageType, VisitorType>(ST_NODE_IF), 00031 cond_(cond) { } 00032 00034 IfNodeTmpl(const IfNodeTmpl &node) 00035 : BlockNodeTmpl<BaseNode, RoleType, MessageType, VisitorType>(node), 00036 cond_(node.cond_) { } 00037 00039 ~IfNodeTmpl() override 00040 { 00041 delete cond_; 00042 } 00043 00045 IfNodeTmpl *clone() const override 00046 { 00047 return new IfNodeTmpl(*this); 00048 } 00049 00053 BaseNode *body() const 00054 { 00055 return BlockNodeTmpl<BaseNode, RoleType, MessageType, VisitorType>::child(0); 00056 } 00057 00060 void set_body(BaseNode *body) 00061 { 00062 this->set_child(0, body); 00063 } 00064 00066 MsgCond *cond() const 00067 { 00068 return cond_; 00069 } 00070 00073 void set_cond(MsgCond *cond) 00074 { 00075 cond_ = cond; 00076 } 00077 00078 void virtual accept(VisitorType &v) override; 00079 }; 00080 00081 using IfNode = IfNodeTmpl<Node, Role, MsgSig, util::NodeVisitor>; 00082 #endif // __cplusplus 00083 00084 #ifdef __cplusplus 00085 extern "C" { 00086 #endif 00087 00088 st_node *st_mk_if_node(st_cond *cond); 00089 00090 #ifdef __cplusplus 00091 } // extern "C" 00092 #endif 00093 00094 #ifdef __cplusplus 00095 } // namespace parameterised 00096 } // namespace sesstype 00097 #endif 00098 00099 #endif//SESSTYPE__PARAMETERISED__NODE__IF_H__