summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnselmo Lacerda S. de Melo <anselmo.melo@openbossa.org>2009-05-29 19:49:02 (GMT)
committerEduardo M. Fleury <eduardo.fleury@openbossa.org>2009-07-22 18:04:37 (GMT)
commita3d7de451c005d76e6680a785195fab0f986c06c (patch)
treeea6ac21337865a9a9881fbe957deca2de1a2fcfe
parent4424171fc41601831089b08d774813f3985ed5a7 (diff)
downloadQt-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.cpp34
-rw-r--r--src/gui/graphicsview/qsimplex_p.h2
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;