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 __ASSIGNMENT_BFIG__ 00016 #define __ASSIGNMENT_BFIG__ 00017 00018 #ifdef _MSC_VER 00019 #pragma warning( disable : 4786 ) 00020 #endif 00021 00022 #include <Mers/Models/Base/BaseModelAssignment.h> 00023 00024 #include <cstdlib> 00025 #include <iostream> 00026 #include <vector> 00027 #include <list> 00028 00029 #include <Mers/Utils/Lang/String.h> 00030 #include <Mers/Utils/Containers/IntegerArray.h> 00031 #include <Mers/Models/Base/BaseModelSentence.h> 00032 #include <Mers/Utils/Containers/DynamicArrayTemplate.h> 00033 00034 namespace Mers { 00035 namespace Generators { 00036 namespace BFIG { 00037 00038 class BFIGConstraint; 00039 class BFIGVariable; 00040 00047 class BFIGAssignment : public Mers::Models::Base::BaseModelAssignment 00048 { 00049 friend std::ostream& operator<<(std::ostream&, BFIGAssignment const &); 00050 00051 public: 00052 //---------------------------------------------------- 00053 // TYPE DEFINITIONS & OVERLOADED OPERATORS 00054 //---------------------------------------------------- 00055 bool operator==(BFIGAssignment const * a) const; 00056 bool operator==(BFIGAssignment const & a) const; 00057 bool operator<(BFIGAssignment const & a) const; 00058 00059 //---------------------------------------------------- 00060 // CONSTRUCTOR 00061 //---------------------------------------------------- 00062 00063 // Should not really be called directly, except for Variable. 00064 BFIGAssignment(BFIGVariable const * sourceVariable_p, 00065 Mers::Models::Base::BaseModelValue const * assignmentValue, 00066 double assignmentCost); 00067 //BFIGAssignment(BFIGVariable const * sourceVariable_p, Mers::Models::Base::BaseModelValue * assignmentValue, 00068 // std::vector<double> const & assignmentCosts, 00069 // IntegerArray const & dependentValues); 00070 //BFIGAssignment(BFIGVariable const * sourceVariable_p, Mers::Models::Base::BaseModelValue * assignmentValue, 00071 // std::vector<double> const & assignmentCosts, 00072 // IntegerArray const & dependentValues, 00073 // DynamicArrayTemplate<Mers::Models::Base::BaseModelSentence const> const & guards); 00074 ~BFIGAssignment(); 00075 00076 //---------------------------------------------------- 00077 // PUBLIC METHODS 00078 //---------------------------------------------------- 00079 BFIGVariable const * getVariable() const; 00080 unsigned int getName() const; 00081 Mers::Utils::Lang::String getNameString() const; 00082 unsigned int getNameInt() const; 00083 unsigned int getValue() const; 00084 Mers::Utils::Lang::String getValueString() const; 00085 unsigned int getValueInt() const; 00086 //void setValue(BFIGVariable::Value newValue); 00087 double getCost() const; 00088 void setCost(double assignmentCost); 00089 double getTrueCost() const; 00090 void setTrueCost(double assignmentCost); 00091 //void setTrueCostByValue(BFIGVariable::Value priorVal); 00092 //void setTrueCostByValue(unsigned int priorVal); 00093 00094 Mers::Utils::Lang::String toString() const; 00095 00096 Mers::Utils::Containers::IntegerArray alternateValues() const; 00097 std::list<BFIGAssignment const *> alternateAssignments() const; 00098 std::vector<BFIGAssignment const *> alternateAssignmentsTotal() const; 00099 00100 bool compatible(BFIGAssignment const * a) const; 00101 bool compatible(std::vector<BFIGAssignment const *> const & a) const; 00102 00103 bool isEnabled() const; 00104 void setEnabled(bool enabled); 00105 //void enableByGuard(unsigned int priorVal); 00106 //bool isCurrent() const; 00107 //void setAsCurrent() const; 00108 //bool isNext() const; 00109 //void setAsNext() const; 00110 void setDebug(bool debugState); 00111 00112 BFIGConstraint const * getConstraint() const; 00113 BFIGConstraint const * getNegativeConstraint() const; 00114 00115 static bool terse; 00116 00117 private: 00118 //---------------------------------------------------- 00119 // PRIVATE DATA MEMBERS 00120 //---------------------------------------------------- 00121 00123 BFIGVariable const * sourceVariable; 00124 00126 double cost; 00127 00129 double trueCost; 00130 00131 // for use with cost vector: 00132 //std::vector<double> trueCostList; 00133 //IntegerArray trueCostValues; 00134 //DynamicArrayTemplate<Mers::Models::Base::BaseModelSentence const> transitionGuardsClauses; // temporary... 00135 //std::vector<BFIGConstraint *> transitionGuards; // temporary... 00136 00139 bool mEnabled; 00140 00143 int debug; 00144 00146 BFIGConstraint const * assertThis; 00148 BFIGConstraint const * assertNotThis; 00149 00150 // A list of conflicts that have an assignment that is inconsistent with this one 00151 //std::vector<BFIGConstraint *> entailedConflicts; 00152 00153 00154 //---------------------------------------------------- 00155 // PRIVATE METHODS 00156 //---------------------------------------------------- 00157 00159 BFIGAssignment(BFIGAssignment const &); 00160 00161 }; 00162 } 00163 } 00164 } 00165 00166 #endif //ndef __ASSIGNMENT__ 00167
1.5.0