00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef _cvc3__theory_bitvector__bitvector_expr_value_h_
00023 #define _cvc3__theory_bitvector__bitvector_expr_value_h_
00024
00025 #include "theory_bitvector.h"
00026
00027 namespace CVC3 {
00028
00029
00030
00031
00032
00033 class BVConstExpr : public ExprValue {
00034 private:
00035 std::vector<bool> d_bvconst;
00036 size_t d_MMIndex;
00037 public:
00038
00039 BVConstExpr(ExprManager* em, std::string bvconst,
00040 size_t mmIndex, ExprIndex idx = 0);
00041
00042
00043 BVConstExpr(ExprManager* em, std::vector<bool> bvconst,
00044 size_t mmIndex, ExprIndex idx = 0);
00045
00046 ExprValue* copy(ExprManager* em, ExprIndex idx = 0) const {
00047 return new(em->getMM(getMMIndex()))
00048 BVConstExpr(em, d_bvconst, d_MMIndex, idx);
00049 }
00050
00051 size_t computeHash() const;
00052 size_t getMMIndex() const { return d_MMIndex; }
00053
00054 const ExprValue* getExprValue() const { return this; }
00055
00056
00057 bool operator==(const ExprValue& ev2) const {
00058 if(ev2.getMMIndex() != d_MMIndex) return false;
00059 return (d_bvconst == ((const BVConstExpr&)ev2).d_bvconst);
00060 }
00061
00062 void* operator new(size_t size, MemoryManager* mm) {
00063 return mm->newData(size);
00064 }
00065 void operator delete(void* pMem, MemoryManager* mm) {
00066 mm->deleteData(pMem);
00067 }
00068
00069 void operator delete(void*) { }
00070
00071 unsigned size() const { return d_bvconst.size(); }
00072 bool getValue(int i) const
00073 { DebugAssert(0 <= i && (unsigned)i < size(), "out of bounds");
00074 return d_bvconst[i]; }
00075
00076 };
00077
00078 }
00079 #endif