00001 00002 // 00003 // Copyright (c) 2004 Model-based Embedded and Robotic Systems Group 00004 // All Rights Reserved Massachusetts Institute of Technology 00005 // 00006 // This software is provided as is. Model-based Embedded and Robotic Systems 00007 // (MERS) group does not assume any responsibility. 00008 // 00009 // Organization: Model-based Embedded and Robotic Systems Group 00010 // Massachusetts Institute of Technology 00011 // 00013 //# CHECKED MJP 08-07-2002 00014 00015 #ifndef __BFIGConstraint__ 00016 #define __BFIGConstraint__ 00017 00018 #ifdef _MSC_VER 00019 #pragma warning(disable:4786) 00020 #endif 00021 00022 #include <cstdlib> 00023 #include <string> 00024 #include <vector> 00025 #include <list> 00026 00027 #include "BFIGConstraintUnit.h" 00028 00029 namespace Mers { 00030 namespace Generators { 00031 namespace BFIG { 00032 00033 class BFIGAssignment; 00034 class BFIGImplicant; 00035 00039 class BFIGConstraint 00040 { 00041 friend std::ostream& operator<<(std::ostream&, BFIGConstraint const &); 00042 00043 public: 00044 BFIGConstraint(bool noEssentialConflict_ = true); 00045 // construct a unit constraint: 00046 BFIGConstraint(BFIGAssignment const * a, bool positive); 00047 BFIGConstraint(BFIGConstraint const & c); 00048 BFIGConstraint(BFIGConstraintUnit const & cu); 00049 // Construct a constraint based on a Conflict: (negated!!) 00050 BFIGConstraint(std::vector<BFIGAssignment const *> const & inconsistentAssignments); 00051 00052 ~BFIGConstraint(); 00053 00054 00055 void addUnit(BFIGConstraintUnit const & unit); 00056 void addUnit(BFIGAssignment const * a, bool parity); 00057 00058 bool empty() const; 00059 bool isEmpty() const; 00060 unsigned int size() const; 00061 unsigned int getSize() const; 00062 unsigned int primeImplicantSize() const; 00063 00064 std::vector<BFIGAssignment const *> getAssignments() const; 00065 std::list<BFIGConstraintUnit> getConstraintUnits() const; 00066 00067 //bool isSatisfiedCurrent(bool conjunctive = false) const; 00068 //bool maybeSatisfiedCurrent(bool conjunctive = false) const; 00069 bool supportedBy(BFIGImplicant const * implicant) const; 00070 bool supportedBy(BFIGAssignment const * a) const; 00071 00072 BFIGConstraint withoutEnd() const; 00073 std::vector<BFIGConstraint> negated() const; 00074 bool contains(BFIGAssignment const * a) const; 00075 // returns true if reduction took place: 00076 bool reduce(BFIGConstraintUnit const & cu); 00077 void clear(); 00078 00079 bool isEssentialConflict() const; 00080 00081 void makePrimeImplicants(); 00082 void addPrimeImplicants(BFIGConstraintUnit const & cu); 00083 std::list<BFIGAssignment const *> getPrimeImplicants() const; 00084 00085 static bool terse; 00086 00087 //---------------------------------------------------- 00088 // TYPE DEFINITIONS & OVERLOADED OPERATORS 00089 //---------------------------------------------------- 00090 bool operator==(BFIGConstraint const & c) const; 00091 bool operator<(BFIGConstraint const & c) const; 00092 00093 private: 00094 std::list<BFIGConstraintUnit> constraintUnits; 00095 bool essentialConflict; 00096 std::list<BFIGAssignment const *> primeImplicants; 00097 bool primed; 00098 00099 //void sort(); 00100 00101 }; 00102 } 00103 } 00104 } 00105 00106 #endif // __BFIGConstraint__ 00107
1.5.0