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