libsesstype  2.0.0
Library for Session Types programming.
par.h
00001 #ifndef SESSTYPE__NODE_PAR_H__
00002 #define SESSTYPE__NODE_PAR_H__
00003 
00004 #include "sesstype/msg.h"
00005 #include "sesstype/role.h"
00006 #include "sesstype/node.h"
00007 #include "sesstype/node/block.h"
00008 
00009 #ifdef __cplusplus
00010 namespace sesstype {
00011 #endif
00012 
00013 #ifdef __cplusplus
00014 
00017 template <class BaseNode, class RoleType, class MessageType, class VisitorType>
00018 class ParNodeTmpl : public BlockNodeTmpl<BaseNode, RoleType, MessageType, VisitorType> {
00019   public:
00021     ParNodeTmpl()
00022         : BlockNodeTmpl<BaseNode, RoleType, MessageType, VisitorType>(ST_NODE_PARALLEL) { }
00023 
00025     ParNodeTmpl(const ParNodeTmpl &node)
00026         : BlockNodeTmpl<BaseNode, RoleType, MessageType, VisitorType>(node) { }
00027 
00029     ParNodeTmpl *clone() const override
00030     {
00031         return new ParNodeTmpl(*this);
00032     }
00033 
00035     void add_parallel(BaseNode *par)
00036     {
00037         this->append_child(par);
00038     }
00039 
00040     void accept(VisitorType &v) override;
00041 };
00042 
00043 using ParNode = ParNodeTmpl<Node, Role, MsgSig, util::NodeVisitor>;
00044 #endif // __cplusplus
00045 
00046 #ifdef __cplusplus
00047 extern "C" {
00048 #endif
00049 
00050 st_node *st_mk_par_node_init();
00051 
00052 st_node *st_par_node_add_parallel(st_node *const node, st_node *par_blk);
00053 
00054 #ifdef __cplusplus
00055 } // extern "C"
00056 #endif
00057 
00058 #ifdef __cplusplus
00059 } // namespace sesstype
00060 #endif
00061 
00062 #endif//SESSTYPE__NODE_PAR_H__
 All Classes Namespaces Files Functions