Index: MiniSat/MiniSat_v1.14/SolverTypes.h =================================================================== --- MiniSat/MiniSat_v1.14/SolverTypes.h (revision 1040) +++ MiniSat/MiniSat_v1.14/SolverTypes.h (working copy) @@ -42,19 +42,32 @@ public: Lit() : x(2*var_Undef) {} // (lit_Undef) explicit Lit(Var var, bool sign = false) : x((var+var) + (int)sign) { } - friend Lit operator ~ (Lit p) { Lit q; q.x = p.x ^ 1; return q; } + friend Lit operator ~ (Lit p); - friend bool sign (Lit p) { return p.x & 1; } - friend int var (Lit p) { return p.x >> 1; } - friend int index (Lit p) { return p.x; } // A "toInt" method that guarantees small, positive integers suitable for array indexing. - friend Lit toLit (int i) { Lit p; p.x = i; return p; } // Inverse of 'index()'. - friend Lit unsign(Lit p) { Lit q; q.x = p.x & ~1; return q; } - friend Lit id (Lit p, bool sgn) { Lit q; q.x = p.x ^ (int)sgn; return q; } + friend bool sign (Lit p); + friend int var (Lit p); + friend int index (Lit p); // A "toInt" method that guarantees small, positive integers suitable for array indexing. + friend Lit toLit (int i); // Inverse of 'index()'. + friend Lit unsign(Lit p); + friend Lit id (Lit p, bool sgn); - friend bool operator == (Lit p, Lit q) { return index(p) == index(q); } - friend bool operator < (Lit p, Lit q) { return index(p) < index(q); } // '<' guarantees that p, ~p are adjacent in the ordering. + friend bool operator == (Lit p, Lit q); + friend bool operator < (Lit p, Lit q); // '<' guarantees that p, ~p are adjacent in the ordering. }; +inline Lit operator ~ (Lit p) { Lit q; q.x = p.x ^ 1; return q; } + +inline bool sign (Lit p) { return p.x & 1; } +inline int var (Lit p) { return p.x >> 1; } +inline int index (Lit p) { return p.x; } // A "toInt" method that guarantees small, positive integers suitable for array indexing. +inline Lit toLit (int i) { Lit p; p.x = i; return p; } // Inverse of 'index()'. +inline Lit unsign(Lit p) { Lit q; q.x = p.x & ~1; return q; } +inline Lit id (Lit p, bool sgn) { Lit q; q.x = p.x ^ (int)sgn; return q; } + +inline bool operator == (Lit p, Lit q) { return index(p) == index(q); } +inline bool operator < (Lit p, Lit q) { return index(p) < index(q); } // '<' guarantees that p, ~p are adjacent in the ordering. + + const Lit lit_Undef(var_Undef, false); // }- Useful special constants. const Lit lit_Error(var_Undef, true ); // } @@ -79,11 +92,7 @@ if (learnt) activity() = 0; } // -- use this function instead: - friend Clause* Clause_new(bool learnt, const vec& ps) { - assert(sizeof(Lit) == sizeof(uint)); - assert(sizeof(float) == sizeof(uint)); - void* mem = xmalloc(sizeof(Clause) + sizeof(uint)*(ps.size() + (int)learnt)); - return new (mem) Clause(learnt, ps); } + friend Clause* Clause_new(bool learnt, const vec& ps); int size () const { return size_learnt >> 1; } bool learnt () const { return size_learnt & 1; } @@ -92,6 +101,12 @@ float& activity () const { return *((float*)&data[size()]); } }; +inline Clause* Clause_new(bool learnt, const vec& ps) { + assert(sizeof(Lit) == sizeof(uint)); + assert(sizeof(float) == sizeof(uint)); + void* mem = xmalloc(sizeof(Clause) + sizeof(uint)*(ps.size() + (int)learnt)); + return new (mem) Clause(learnt, ps); +} //================================================================================================= // GClause -- Generalize clause: @@ -102,8 +117,8 @@ void* data; GClause(void* d) : data(d) {} public: - friend GClause GClause_new(Lit p) { return GClause((void*)((index(p) << 1) + 1)); } - friend GClause GClause_new(Clause* c) { assert(((uintp)c & 1) == 0); return GClause((void*)c); } + friend GClause GClause_new(Lit p); + friend GClause GClause_new(Clause* c); bool isLit () const { return ((uintp)data & 1) == 1; } bool isNull () const { return data == NULL; } @@ -114,6 +129,8 @@ }; #define GClause_NULL GClause_new((Clause*)NULL) +inline GClause GClause_new(Lit p) { return GClause((void*)((index(p) << 1) + 1)); } +inline GClause GClause_new(Clause* c) { assert(((uintp)c & 1) == 0); return GClause((void*)c); } //================================================================================================= #endif