libsesstype  2.0.0
Library for Session Types programming.
node_visitor.h
Go to the documentation of this file.
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__
 All Classes Namespaces Files Functions