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