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