Go to the documentation of this file.00001 #ifndef DOMAIN_TRANSITION_GRAPH_SYMB_H
00002 #define DOMAIN_TRANSITION_GRAPH_SYMB_H
00003
00004 #include <vector>
00005 #include "domain_transition_graph.h"
00006 #include "helper_functions.h"
00007 #include "operator.h"
00008 using namespace std;
00009
00010 class Axiom_relational;
00011 class Variable;
00012
00013 class DomainTransitionGraphSymb: public DomainTransitionGraph
00014 {
00015 private:
00016 struct Transition {
00017 Transition(int theTarget, int theOp, trans_type theType) :
00018 target(theTarget), op(theOp), type(theType) {
00019 }
00020 bool operator==(const Transition &other) const {
00021 return target == other.target && op == other.op
00022 && condition == other.condition && type == other.type;
00023 }
00024 bool operator<(const Transition &other) const;
00025 int target;
00026 int op;
00027 SetEdgeCondition set_condition;
00028 EdgeCondition condition;
00029 trans_type type;
00030 DurationCond duration;
00031 void dump();
00032 };
00033 typedef vector<Transition> Vertex;
00034 vector<Vertex> vertices;
00035 int level;
00036
00037 public:
00038 DomainTransitionGraphSymb(const Variable &var);
00039 void addTransition(int from, int to, const Operator &op, int op_index,
00040 trans_type type, vector<Variable *> variables);
00041 void addAxRelTransition(int from, int to, const Axiom_relational &ax,
00042 int ax_index);
00043 void finalize();
00044 void dump() const;
00045 void generate_cpp_input(ostream &outfile) const;
00046 bool is_strongly_connected() const;
00047 };
00048
00049 #endif