00001
00004 #ifndef DIVINE_EXPRESSION_HH
00005 #define DIVINE_EXPRESSION_HH
00006
00007 #ifndef DOXYGEN_PROCESSING
00008
00009 #include <string>
00010 #include "common/types.hh"
00011 #include "system/system.hh"
00012
00013 namespace divine {
00014 #endif //DOXYGEN_PROCESSING
00015
00016
00017 class system_t;
00018
00020
00029 class expression_t
00030 {
00031 protected:
00032 system_t * parent_system;
00033
00034 public:
00036 expression_t() { parent_system=0; }
00038
00039 expression_t(system_t * const system) { parent_system=system; }
00041 expression_t(const expression_t & second)
00042 { parent_system = second.parent_system; }
00044 virtual ~expression_t() {};
00045
00047 system_t * get_parent_system() const { return parent_system; }
00049 virtual void set_parent_system(system_t & system)
00050 { parent_system = &system; }
00051
00053 virtual void swap(expression_t & expr)
00054 { system_t * aux_system = parent_system;
00055 parent_system = expr.parent_system;
00056 expr.parent_system = aux_system; }
00057
00058
00059
00061 virtual void assign(const expression_t & expr)
00062 { parent_system = expr.parent_system; }
00063
00065
00074 expression_t & operator=(const expression_t & second)
00075 { assign(second); return (*this); }
00076
00077
00079
00081 virtual std::string to_string() const = 0;
00083
00089 virtual int from_string(std::string & expr_str,
00090 const size_int_t process_gid = NO_ID) = 0;
00092 virtual void write(std::ostream & ostr) const = 0;
00094
00100 virtual int read(std::istream & istr, size_int_t process_gid = NO_ID) = 0;
00101 };
00102
00103 #ifndef DOXYGEN_PROCESSING
00104 }
00105
00106 #endif //DOXYGEN_PROCESSING
00107
00108 #endif
00109