diff options
author | Anselmo Lacerda S. de Melo <anselmo.melo@openbossa.org> | 2009-05-29 19:49:02 (GMT) |
---|---|---|
committer | Eduardo M. Fleury <eduardo.fleury@openbossa.org> | 2009-07-22 18:04:37 (GMT) |
commit | a3d7de451c005d76e6680a785195fab0f986c06c (patch) | |
tree | ea6ac21337865a9a9881fbe957deca2de1a2fcfe | |
parent | 4424171fc41601831089b08d774813f3985ed5a7 (diff) | |
download | Qt-a3d7de451c005d76e6680a785195fab0f986c06c.zip Qt-a3d7de451c005d76e6680a785195fab0f986c06c.tar.gz Qt-a3d7de451c005d76e6680a785195fab0f986c06c.tar.bz2 |
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 <anselmo.melo@openbossa.org>
-rw-r--r-- | src/gui/graphicsview/qsimplex_p.cpp | 34 | ||||
-rw-r--r-- | 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<QSimplexVariable *, qreal>::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<QSimplexConstraint *> constraints; |