![]() |
libsesstype
2.0.0
Library for Session Types programming.
|
00001 00005 #ifndef SESSTYPE__PARAMETERISED__UTIL__NODE_VISITOR_H__ 00006 #define SESSTYPE__PARAMETERISED__UTIL__NODE_VISITOR_H__ 00007 00008 #include "sesstype/parameterised/msg.h" 00009 #include "sesstype/parameterised/role.h" 00010 #include "sesstype/parameterised/node.h" 00011 #include "sesstype/parameterised/node/interaction.h" 00012 #include "sesstype/parameterised/node/choice.h" 00013 #include "sesstype/parameterised/node/recur.h" 00014 #include "sesstype/parameterised/node/continue.h" 00015 #include "sesstype/parameterised/node/par.h" 00016 #include "sesstype/parameterised/node/nested.h" 00017 #include "sesstype/parameterised/node/interruptible.h" 00018 #include "sesstype/parameterised/node/for.h" 00019 #include "sesstype/parameterised/node/oneof.h" 00020 #include "sesstype/parameterised/node/if.h" 00021 #include "sesstype/parameterised/node/allreduce.h" 00022 00023 #ifdef __cplusplus 00024 00025 namespace sesstype { 00026 00027 template class BlockNodeTmpl<parameterised::Node, parameterised::Role, parameterised::MsgSig, parameterised::util::NodeVisitor>; 00028 //template class InteractionNodeTmpl<parameterised::Node, parameterised::Role, parameterised::MsgSig, parameterised::util::NodeVisitor>; 00029 template class ChoiceNodeTmpl<parameterised::Node, parameterised::Role, parameterised::MsgSig, parameterised::util::NodeVisitor>; 00030 template class RecurNodeTmpl<parameterised::Node, parameterised::Role, parameterised::MsgSig, parameterised::util::NodeVisitor>; 00031 template class ContinueNodeTmpl<parameterised::Node, parameterised::Role, parameterised::MsgSig, parameterised::util::NodeVisitor>; 00032 template class ParNodeTmpl<parameterised::Node, parameterised::Role, parameterised::MsgSig, parameterised::util::NodeVisitor>; 00033 template class NestedNodeTmpl<parameterised::Node, parameterised::Role, parameterised::MsgSig, parameterised::util::NodeVisitor>; 00034 template class InterruptibleNodeTmpl<parameterised::Node, parameterised::Role, parameterised::MsgSig, parameterised::util::NodeVisitor>; 00035 00036 namespace parameterised { 00037 00038 class InteractionNode; 00039 template class ForNodeTmpl<Node, Role, MsgSig, util::NodeVisitor>; 00040 template class OneofNodeTmpl<Node, Role, MsgSig, util::NodeVisitor>; 00041 template class IfNodeTmpl<Node, Role, MsgSig, util::NodeVisitor>; 00042 template class AllReduceNodeTmpl<Node, Role, MsgSig, util::NodeVisitor>; 00043 00044 namespace util { 00045 class NodeVisitor; 00046 } // namespace util 00047 00048 } // namespace parameterised 00049 } // namespace sesstype 00050 #endif 00051 00052 #ifdef __cplusplus 00053 namespace sesstype { 00054 namespace parameterised { 00055 namespace util { 00056 #endif 00057 00058 #ifdef __cplusplus 00059 00062 class NodeVisitor { 00063 public: 00064 virtual void visit(Node *node) = 0; 00065 virtual void visit(BlockNodeTmpl<Node, Role, MsgSig, util::NodeVisitor> *node) = 0; 00066 virtual void visit(sesstype::parameterised::InteractionNode *node) = 0; 00067 virtual void visit(ChoiceNodeTmpl<Node, Role, MsgSig, util::NodeVisitor> *node) = 0; 00068 virtual void visit(RecurNodeTmpl<Node, Role, MsgSig, util::NodeVisitor> *node) = 0; 00069 virtual void visit(ContinueNodeTmpl<Node, Role, MsgSig, util::NodeVisitor> *node) = 0; 00070 virtual void visit(ParNodeTmpl<Node, Role, MsgSig, util::NodeVisitor> *node) = 0; 00071 virtual void visit(NestedNodeTmpl<Node, Role, MsgSig, util::NodeVisitor> *node) = 0; 00072 virtual void visit(InterruptibleNodeTmpl<Node, Role, MsgSig, util::NodeVisitor> *node) = 0; 00073 virtual void visit(ForNodeTmpl<Node, Role, MsgSig, util::NodeVisitor> *node) = 0; 00074 virtual void visit(OneofNodeTmpl<Node, Role, MsgSig, util::NodeVisitor> *node) = 0; 00075 virtual void visit(IfNodeTmpl<Node, Role, MsgSig, util::NodeVisitor> *node) = 0; 00076 virtual void visit(AllReduceNodeTmpl<Node, Role, MsgSig, util::NodeVisitor> *node) = 0; 00077 }; 00078 #endif // __cplusplus 00079 00080 #ifdef __cplusplus 00081 } // namespace util 00082 } // namespace parameterised 00083 } // namespace sesstype 00084 #endif 00085 00086 #endif//SESSTYPE__PARAMETERISED__UTIL__NODE_VISITOR_H__