1 /* 2 * Copyright 2007-2008, Christof Lutteroth, lutteroth@cs.auckland.ac.nz 3 * Copyright 2007-2008, James Kim, jkim202@ec.auckland.ac.nz 4 * Distributed under the terms of the MIT License. 5 */ 6 #ifndef VARIABLE_H 7 #define VARIABLE_H 8 9 10 #include <ObjectList.h> 11 #include <String.h> 12 13 namespace LinearProgramming { 14 15 class Constraint; 16 class LinearSpec; 17 class Summand; 18 19 /** 20 * Contains minimum and maximum values. 21 */ 22 class Variable { 23 public: 24 int32 Index() const; 25 int32 GlobalIndex() const; 26 LinearSpec* LS() const; 27 double Value() const; 28 void SetValue(double value); 29 double Min() const; 30 void SetMin(double min); 31 double Max() const; 32 void SetMax(double max); 33 void SetRange(double min, double max); 34 35 const char* Label(); 36 void SetLabel(const char* label); 37 38 BString ToString() const; 39 40 Constraint* IsEqual(Variable* var); 41 Constraint* IsSmallerOrEqual(Variable* var); 42 Constraint* IsGreaterOrEqual(Variable* var); 43 44 Constraint* IsEqual(Variable* var, 45 double penaltyNeg, double penaltyPos); 46 Constraint* IsSmallerOrEqual(Variable* var, 47 double penaltyNeg, double penaltyPos); 48 Constraint* IsGreaterOrEqual(Variable* var, 49 double penaltyNeg, double penaltyPos); 50 51 bool IsValid(); 52 //! Dangerous the variable don't belong to the LinearSpec anymore, 53 //! delete it yourself! 54 void Invalidate(); 55 56 virtual ~Variable(); 57 58 protected: 59 Variable(LinearSpec* ls); 60 61 //! returns the ref count 62 int32 AddReference(); 63 int32 RemoveReference(); 64 private: 65 LinearSpec* fLS; 66 67 double fValue; 68 double fMin; 69 double fMax; 70 BString fLabel; 71 72 bool fIsValid; 73 74 int32 fReferenceCount; 75 public: 76 friend class LinearSpec; 77 }; 78 79 80 typedef BObjectList<Variable> VariableList; 81 82 83 } // namespace LinearProgramming 84 85 using LinearProgramming::Variable; 86 using LinearProgramming::VariableList; 87 88 #endif // VARIABLE_H 89