![]() |
libsesstype
2.0.0
Library for Session Types programming.
|
00001 #ifndef SESSTYPE__NODE__RECUR_H__ 00002 #define SESSTYPE__NODE__RECUR_H__ 00003 00004 #ifdef __cplusplus 00005 #include <string> 00006 #endif 00007 00008 #include "sesstype/msg.h" 00009 #include "sesstype/role.h" 00010 #include "sesstype/node.h" 00011 #include "sesstype/node/block.h" 00012 #include "sesstype/util/clonable.h" 00013 #include "sesstype/util/visitor_tmpl.h" 00014 00015 #ifdef __cplusplus 00016 namespace sesstype { 00017 #endif 00018 00019 #ifdef __cplusplus 00020 00023 template <class BaseNode, class RoleType, class MessageType, class VisitorType> 00024 class RecurNodeTmpl : public BlockNodeTmpl<BaseNode, RoleType, MessageType, VisitorType> { 00025 std::string label_; 00026 00027 public: 00030 RecurNodeTmpl(std::string label) 00031 : BlockNodeTmpl<BaseNode, RoleType, MessageType, VisitorType>(ST_NODE_RECUR), 00032 label_(label) { } 00033 00035 RecurNodeTmpl(const RecurNodeTmpl &node) 00036 : BlockNodeTmpl<BaseNode, RoleType, MessageType, VisitorType>(node), 00037 label_(node.label_) { } 00038 00040 RecurNodeTmpl *clone() const override 00041 { 00042 return new RecurNodeTmpl(*this); 00043 } 00044 00047 void set_label(std::string label) 00048 { 00049 label_ = label; 00050 } 00051 00053 std::string label() const 00054 { 00055 return label_; 00056 } 00057 00058 void accept(VisitorType &v) override; 00059 }; 00060 00061 using RecurNode = RecurNodeTmpl<Node, Role, MsgSig, util::NodeVisitor>; 00062 #endif // __cplusplus 00063 00064 #ifdef __cplusplus 00065 extern "C" { 00066 #endif 00067 00068 st_node *st_mk_recur_node(char *label); 00069 00070 st_node *st_recur_node_set_label(st_node *const node, char *label); 00071 00072 const char *st_recur_node_get_label(st_node *const node); 00073 00074 #ifdef __cplusplus 00075 } // extern "C" 00076 #endif 00077 00078 #ifdef __cplusplus 00079 } // namespace sesstype 00080 #endif 00081 00082 #endif//SESSTYPE__NODE__RECUR_H__