00001
00002
00003
00004 #ifndef DIVINE_TRANSITION_HH
00005 #define DIVINE_TRANSITION_HH
00006
00007 #include "system/system.hh"
00008
00009 #ifndef DOXYGEN_PROCESSING
00010
00011 namespace divine {
00012 using std::cerr; using std::endl;
00013 #endif //DOXYGEN_PROCESSING
00014
00015
00016 class system_t;
00017
00018
00020
00027 class transition_t
00028 {
00029 protected:
00032 static error_vector_t * ptrans_terr;
00035 static void set_error_vector(error_vector_t & evect)
00036 { ptrans_terr = &evect; }
00039 static error_vector_t & get_error_vector() { return (*ptrans_terr); }
00040
00041 size_int_t local_id;
00042 size_int_t global_id;
00043 system_t * parent_system;
00044
00045 public:
00047 transition_t() { local_id=NO_ID; global_id=NO_ID; parent_system=0; }
00049
00050 transition_t(system_t * const system)
00051 { local_id=NO_ID; global_id=NO_ID; parent_system=system;}
00053 virtual ~transition_t() {}
00055
00056 size_int_t get_lid() const { return local_id; }
00058
00059 size_int_t get_gid() const { return global_id; }
00061 system_t * get_parent_system() const { return parent_system; }
00063 virtual void set_parent_system(system_t & system)
00064 { parent_system = &system; }
00065
00067
00071 bool can_be_modified() const;
00072
00078
00079
00083 virtual void set_gid(const size_int_t gid) { global_id = gid; }
00085
00089 virtual void set_lid(const size_int_t id) { local_id = id; }
00092
00093
00094
00097
00099
00102 virtual std::string to_string() const = 0;
00104
00107 virtual void write(std::ostream & ostr) const = 0;
00110
00111
00115 bool can_read() const;
00116
00117
00120
00121
00126
00127
00133 virtual int read(std::istream & istr, size_int_t process_gid = NO_ID) = 0;
00135
00141 virtual int from_string(std::string & trans_str,
00142 const size_int_t process_gid = NO_ID) = 0;
00145 };
00146
00147 #ifndef DOXYGEN_PROCESSING
00148 }
00149
00150 #endif //DOXYGEN_PROCESSING
00151
00152 #endif
00153