![]() |
libsesstype
2.0.0
Library for Session Types programming.
|
00001 00005 #ifndef SESSTYPE__UTIL__NODE_VISITOR_H__ 00006 #define SESSTYPE__UTIL__NODE_VISITOR_H__ 00007 00008 #include "sesstype/msg.h" 00009 #include "sesstype/role.h" 00010 #include "sesstype/node.h" 00011 #include "sesstype/node/interaction.h" 00012 #include "sesstype/node/choice.h" 00013 #include "sesstype/node/recur.h" 00014 #include "sesstype/node/continue.h" 00015 #include "sesstype/node/par.h" 00016 #include "sesstype/node/nested.h" 00017 #include "sesstype/node/interruptible.h" 00018 00019 #ifdef __cplusplus 00020 00021 namespace sesstype { 00022 00023 namespace util { 00024 class NodeVisitor; 00025 } // namespace util 00026 00027 template class BlockNodeTmpl<Node, Role, MsgSig, util::NodeVisitor>; 00028 template class InteractionNodeTmpl<Node, Role, MsgSig, util::NodeVisitor>; 00029 template class ChoiceNodeTmpl<Node, Role, MsgSig, util::NodeVisitor>; 00030 template class RecurNodeTmpl<Node, Role, MsgSig, util::NodeVisitor>; 00031 template class ContinueNodeTmpl<Node, Role, MsgSig, util::NodeVisitor>; 00032 template class ParNodeTmpl<Node, Role, MsgSig, util::NodeVisitor>; 00033 template class NestedNodeTmpl<Node, Role, MsgSig, util::NodeVisitor>; 00034 template class InterruptibleNodeTmpl<Node, Role, MsgSig, util::NodeVisitor>; 00035 00036 } // namespace sesstype 00037 #endif 00038 00039 #ifdef __cplusplus 00040 namespace sesstype { 00041 namespace util { 00042 #endif 00043 00044 #ifdef __cplusplus 00045 00048 class NodeVisitor { 00049 public: 00050 virtual void visit(Node *node) = 0; 00051 virtual void visit(BlockNodeTmpl<Node, Role, MsgSig, util::NodeVisitor> *node) = 0; 00052 virtual void visit(InteractionNodeTmpl<Node, Role, MsgSig, util::NodeVisitor> *node) = 0; 00053 virtual void visit(ChoiceNodeTmpl<Node, Role, MsgSig, util::NodeVisitor> *node) = 0; 00054 virtual void visit(RecurNodeTmpl<Node, Role, MsgSig, util::NodeVisitor> *node) = 0; 00055 virtual void visit(ContinueNodeTmpl<Node, Role, MsgSig, util::NodeVisitor> *node) = 0; 00056 virtual void visit(ParNodeTmpl<Node, Role, MsgSig, util::NodeVisitor> *node) = 0; 00057 virtual void visit(NestedNodeTmpl<Node, Role, MsgSig, util::NodeVisitor> *node) = 0; 00058 virtual void visit(InterruptibleNodeTmpl<Node, Role, MsgSig, util::NodeVisitor> *node) = 0; 00059 }; 00060 #endif // __cplusplus 00061 00062 #ifdef __cplusplus 00063 } // namespace util 00064 } // namespace sesstype 00065 #endif 00066 00067 #endif//SESSTYPE__UTIL__NODE_VISITOR_H__