00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043 #ifndef _CVC_lite__expr_h_
00044 #include "expr.h"
00045 #endif
00046
00047 #ifndef _CVC_lite__assumptions_h_
00048 #define _CVC_lite__assumptions_h_
00049
00050 namespace CVCL {
00051
00052
00053 class AssumptionsValue;
00054 class AVHash;
00055
00056 class Assumptions {
00057 private:
00058 AssumptionsValue *d_val;
00059
00060 private:
00061
00062 Assumptions(AssumptionsValue *v);
00063
00064
00065 const Theorem& findTheorem(const Expr& e) const;
00066
00067 static bool findExpr(const Assumptions& a, const Expr& e,
00068 std::vector<Theorem>& gamma);
00069 static bool findExprs(const Assumptions& a, const std::vector<Expr>& es,
00070 std::vector<Theorem>& gamma);
00071
00072 public:
00073
00074 Assumptions() : d_val(NULL) { }
00075
00076 Assumptions(const std::vector<Theorem>& v);
00077
00078 Assumptions(const Theorem& t);
00079
00080 Assumptions(const Theorem& t1, const Theorem& t2);
00081
00082
00083 ~Assumptions();
00084
00085
00086
00087 Assumptions(const Assumptions &assump);
00088
00089 Assumptions &operator=(const Assumptions &assump);
00090
00091 bool isNull() const { return d_val == NULL; }
00092
00093
00094 void init();
00095
00096
00097 Assumptions copy() const;
00098
00099
00100 void add(const Theorem& t);
00101 void add(const Assumptions& a);
00102
00103 void clear();
00104
00105 int size() const;
00106 bool empty() const;
00107
00108 bool isConst() const;
00109 void setConst();
00110
00111
00112 std::string toString() const;
00113 void print() const;
00114
00115
00116
00117
00118
00119 const Theorem& operator[](const Expr& e) const;
00120
00121
00122 const Theorem& find(const Expr& e) const;
00123
00124
00125
00126 class iterator : public std::iterator<std::input_iterator_tag,Theorem,ptrdiff_t> {
00127
00128 friend class Assumptions;
00129 private:
00130 std::vector<Theorem>::const_iterator d_it;
00131
00132 iterator(const std::vector<Theorem>::const_iterator& i): d_it(i) { }
00133 public:
00134
00135 iterator() { }
00136
00137 ~iterator() { }
00138
00139 bool operator==(const iterator& i) const { return (d_it == i.d_it); }
00140
00141 bool operator!=(const iterator& i) const { return (d_it != i.d_it); }
00142
00143 const Theorem& operator*() const { return *d_it; }
00144
00145 const Theorem* operator->() const { return &(operator*()); }
00146
00147 iterator& operator++();
00148
00149 class Proxy {
00150 const Theorem* d_t;
00151 public:
00152 Proxy(const Theorem& t) : d_t(&t) { }
00153 const Theorem& operator*() { return *d_t; }
00154 };
00155
00156 Proxy operator++(int);
00157 };
00158
00159 iterator begin() const;
00160 iterator end() const;
00161
00162
00163 void add(const iterator& it) { add(*it); }
00164
00165
00166
00167
00168
00169 friend Assumptions operator-(const Assumptions& a, const Expr& e);
00170
00171 friend Assumptions operator-(const Assumptions& a,
00172 const std::vector<Expr>& es);
00173
00174 friend std::ostream& operator<<(std::ostream& os,
00175 const Assumptions &assump);
00176
00177 friend bool operator==(const Assumptions& a1, const Assumptions& a2);
00178 friend bool operator!=(const Assumptions& a1, const Assumptions& a2);
00179
00180 };
00181
00182 }
00183
00184 #endif