diff --git a/headers/libs/linprog/Constraint.h b/headers/libs/linprog/Constraint.h index 00ca91b410..2fae5f932c 100644 --- a/headers/libs/linprog/Constraint.h +++ b/headers/libs/linprog/Constraint.h @@ -3,19 +3,19 @@ * Copyright 2007-2008, James Kim, jkim202@ec.auckland.ac.nz * Distributed under the terms of the MIT License. */ - #ifndef CONSTRAINT_H #define CONSTRAINT_H -#include "OperatorType.h" -#include "Variable.h" -#include "Summand.h" +#include #include #include #include #include -#include + +#include "OperatorType.h" +#include "Summand.h" +#include "Variable.h" namespace LinearProgramming { @@ -29,66 +29,66 @@ class LinearSpec; class Constraint { public: - int32 Index() const; + int32 Index() const; - BList* LeftSide(); - void SetLeftSide(BList* summands); - void UpdateLeftSide(); - void SetLeftSide(double coeff1, Variable* var1); - void SetLeftSide(double coeff1, Variable* var1, - double coeff2, Variable* var2); - void SetLeftSide(double coeff1, Variable* var1, - double coeff2, Variable* var2, - double coeff3, Variable* var3); - void SetLeftSide(double coeff1, Variable* var1, - double coeff2, Variable* var2, - double coeff3, Variable* var3, - double coeff4, Variable* var4); + BList* LeftSide(); + void SetLeftSide(BList* summands); + void UpdateLeftSide(); + void SetLeftSide(double coeff1, Variable* var1); + void SetLeftSide(double coeff1, Variable* var1, + double coeff2, Variable* var2); + void SetLeftSide(double coeff1, Variable* var1, + double coeff2, Variable* var2, + double coeff3, Variable* var3); + void SetLeftSide(double coeff1, Variable* var1, + double coeff2, Variable* var2, + double coeff3, Variable* var3, + double coeff4, Variable* var4); - OperatorType Op(); - void SetOp(OperatorType value); - double RightSide() const; - void SetRightSide(double value); - double PenaltyNeg() const; - void SetPenaltyNeg(double value); - double PenaltyPos() const; - void SetPenaltyPos(double value); + OperatorType Op(); + void SetOp(OperatorType value); + double RightSide() const; + void SetRightSide(double value); + double PenaltyNeg() const; + void SetPenaltyNeg(double value); + double PenaltyPos() const; + void SetPenaltyPos(double value); - const char* Label(); - void SetLabel(const char* label); + const char* Label(); + void SetLabel(const char* label); - void WriteXML(BFile* file); + void WriteXML(BFile* file); - Variable* DNeg() const; - Variable* DPos() const; + Variable* DNeg() const; + Variable* DPos() const; - void SetOwner(void* owner); - void* Owner() const; + void SetOwner(void* owner); + void* Owner() const; - bool IsValid(); - void Invalidate(); + bool IsValid(); + void Invalidate(); - operator BString() const; - void GetString(BString& string) const; + operator BString() const; + void GetString(BString& string) const; - ~Constraint(); + ~Constraint(); protected: - Constraint(LinearSpec* ls, BList* summands, - OperatorType op, double rightSide, - double penaltyNeg, double penaltyPos); + Constraint(LinearSpec* ls, BList* summands, + OperatorType op, double rightSide, + double penaltyNeg, double penaltyPos); private: - LinearSpec* fLS; - BList* fLeftSide; - OperatorType fOp; - double fRightSide; - Summand* fDNegObjSummand; - Summand* fDPosObjSummand; - void* fOwner; - char* fLabel; + LinearSpec* fLS; + BList* fLeftSide; + OperatorType fOp; + double fRightSide; + Summand* fDNegObjSummand; + Summand* fDPosObjSummand; + void* fOwner; + BString fLabel; - bool fIsValid; + bool fIsValid; public: friend class LinearSpec; diff --git a/headers/libs/linprog/Variable.h b/headers/libs/linprog/Variable.h index d212fd6bec..1c693bafb6 100644 --- a/headers/libs/linprog/Variable.h +++ b/headers/libs/linprog/Variable.h @@ -3,13 +3,13 @@ * Copyright 2007-2008, James Kim, jkim202@ec.auckland.ac.nz * Distributed under the terms of the MIT License. */ - #ifndef VARIABLE_H #define VARIABLE_H #include -#include #include +#include +#include namespace LinearProgramming { @@ -22,52 +22,52 @@ class Summand; * Contains minimum and maximum values. */ class Variable { - public: - int32 Index() const; - LinearSpec* LS() const; - double Value() const; - void SetValue(double value); - double Min() const; - void SetMin(double min); - double Max() const; - void SetMax(double max); - void SetRange(double min, double max); + int32 Index() const; + LinearSpec* LS() const; + double Value() const; + void SetValue(double value); + double Min() const; + void SetMin(double min); + double Max() const; + void SetMax(double max); + void SetRange(double min, double max); - const char* Label(); - void SetLabel(const char* label); + const char* Label(); + void SetLabel(const char* label); - operator BString() const; - void GetString(BString& string) const; + operator BString() const; + void GetString(BString& string) const; - Constraint* IsEqual(Variable* var); - Constraint* IsSmallerOrEqual(Variable* var); - Constraint* IsGreaterOrEqual(Variable* var); + Constraint* IsEqual(Variable* var); + Constraint* IsSmallerOrEqual(Variable* var); + Constraint* IsGreaterOrEqual(Variable* var); - Constraint* IsEqual(Variable* var, - double penaltyNeg, double penaltyPos); - Constraint* IsSmallerOrEqual(Variable* var, - double penaltyNeg, double penaltyPos); - Constraint* IsGreaterOrEqual(Variable* var, - double penaltyNeg, double penaltyPos); + Constraint* IsEqual(Variable* var, + double penaltyNeg, double penaltyPos); + Constraint* IsSmallerOrEqual(Variable* var, + double penaltyNeg, double penaltyPos); + Constraint* IsGreaterOrEqual(Variable* var, + double penaltyNeg, double penaltyPos); - bool IsValid(); - void Invalidate(); + bool IsValid(); + void Invalidate(); - virtual ~Variable(); + virtual ~Variable(); protected: - Variable(LinearSpec* ls); + Variable(LinearSpec* ls); private: - LinearSpec* fLS; - BList* fUsingSummands; // All Summands that link to this Variable - double fValue; - double fMin; - double fMax; - char* fLabel; + LinearSpec* fLS; + BList* fUsingSummands; + // All Summands that link to this Variable + double fValue; + double fMin; + double fMax; + BString fLabel; - bool fIsValid; + bool fIsValid; public: friend class LinearSpec; diff --git a/src/libs/linprog/Constraint.cpp b/src/libs/linprog/Constraint.cpp index 3b2798ffe0..c2e7cc69df 100644 --- a/src/libs/linprog/Constraint.cpp +++ b/src/libs/linprog/Constraint.cpp @@ -325,15 +325,14 @@ Constraint::SetPenaltyPos(double value) const char* Constraint::Label() { - return fLabel; + return fLabel.String(); } void Constraint::SetLabel(const char* label) { - fLabel = (char*) malloc(strlen(label) + 1); - strcpy(fLabel, label); + fLabel = label; } @@ -471,8 +470,7 @@ void Constraint::GetString(BString& string) const { string << "Constraint "; - if (fLabel) - string << fLabel; + string << fLabel; string << "(" << (int32)this << "): "; if (fIsValid) { @@ -504,7 +502,6 @@ Constraint::Constraint(LinearSpec* ls, BList* summands, OperatorType op, fOp(op), fRightSide(rightSide), fOwner(NULL), - fLabel(NULL), fIsValid(true) { double coeffs[summands->CountItems() + 2]; diff --git a/src/libs/linprog/Variable.cpp b/src/libs/linprog/Variable.cpp index 3e1aabd3a3..a9291a701d 100644 --- a/src/libs/linprog/Variable.cpp +++ b/src/libs/linprog/Variable.cpp @@ -154,15 +154,14 @@ Variable::SetRange(double min, double max) const char* Variable::Label() { - return fLabel; + return fLabel.String(); } void Variable::SetLabel(const char* label) { - fLabel = (char*) malloc(strlen(label) + 1); - strcpy(fLabel, label); + fLabel = label; } @@ -298,7 +297,7 @@ Variable::Invalidate() fLS->Variables()->RemoveItem(this); // invalidate all constraints that use this variable - BList* markedForInvalidation = new BList(); + BList markedForInvalidation; BList* constraints = fLS->Constraints(); for (int i = 0; i < constraints->CountItems(); i++) { Constraint* constraint = static_cast( @@ -311,15 +310,14 @@ Variable::Invalidate() for (int j = 0; j < summands->CountItems(); j++) { Summand* summand = static_cast(summands->ItemAt(j)); if (summand->Var() == this) { - markedForInvalidation->AddItem(constraint); + markedForInvalidation.AddItem(constraint); break; } } } - for (int i = 0; i < markedForInvalidation->CountItems(); i++) - static_cast(markedForInvalidation->ItemAt(i)) + for (int i = 0; i < markedForInvalidation.CountItems(); i++) + static_cast(markedForInvalidation.ItemAt(i)) ->Invalidate(); - delete markedForInvalidation; } @@ -355,7 +353,6 @@ Variable::Variable(LinearSpec* ls) Variable::~Variable() { Invalidate(); - free(fLabel); delete fUsingSummands; }