From a3d7de451c005d76e6680a785195fab0f986c06c Mon Sep 17 00:00:00 2001 From: "Anselmo Lacerda S. de Melo" Date: Fri, 29 May 2009 16:49:02 -0300 Subject: QSimplex: new method solver, avoinding code replication The methods solveMin() and solveMax() had similar implementation, except by a "-1" multiplier. This commit includes a new private method called solver that is called by both solveMin() and solveMax(). A new enum 'solverFactor' was added admiting 2 values - Maximum (+1) and Minimum (-1). Signed-off-by: Anselmo Lacerda S. de Melo --- src/gui/graphicsview/qsimplex_p.cpp | 34 ++++++++++++++++------------------ src/gui/graphicsview/qsimplex_p.h | 2 ++ 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/gui/graphicsview/qsimplex_p.cpp b/src/gui/graphicsview/qsimplex_p.cpp index 774af8c..b1cba45 100644 --- a/src/gui/graphicsview/qsimplex_p.cpp +++ b/src/gui/graphicsview/qsimplex_p.cpp @@ -306,7 +306,14 @@ bool QSimplex::iterate() return true; } -qreal QSimplex::solveMin() +/*! + \internal + + Both solveMin and solveMax are interfaces to this method. + + The enum solverFactor admits 2 values: Minimum (-1) and Maximum (+1). + */ +qreal QSimplex::solver(solverFactor factor) { // Remove old objective clearRow(0); @@ -316,32 +323,23 @@ qreal QSimplex::solveMin() for (iter = objective->variables.constBegin(); iter != objective->variables.constEnd(); ++iter) { - setValueAt(0, iter.key()->index, iter.value()); + setValueAt(0, iter.key()->index, -1 * factor * iter.value()); } solveMaxHelper(); collectResults(); - return -1 * valueAt(0, columns - 1); + return factor * valueAt(0, columns - 1); } -qreal QSimplex::solveMax() +qreal QSimplex::solveMin() { - // Remove old objective - clearRow(0); - - // Set new objective - QHash::const_iterator iter; - for (iter = objective->variables.constBegin(); - iter != objective->variables.constEnd(); - ++iter) { - setValueAt(0, iter.key()->index, -1 * iter.value()); - } - - solveMaxHelper(); - collectResults(); + return solver(Minimum); +} - return valueAt(0, columns - 1); +qreal QSimplex::solveMax() +{ + return solver(Maximum); } void QSimplex::collectResults() diff --git a/src/gui/graphicsview/qsimplex_p.h b/src/gui/graphicsview/qsimplex_p.h index 3881893..dad82ce 100644 --- a/src/gui/graphicsview/qsimplex_p.h +++ b/src/gui/graphicsview/qsimplex_p.h @@ -88,6 +88,8 @@ private: // Helpers void clearDataStructures(); void solveMaxHelper(); + enum solverFactor { Minimum = -1, Maximum = 1 }; + qreal solver(solverFactor factor); void collectResults(); QList constraints; -- cgit v0.12