18#include <QtWidgets/private/qtwidgetsglobal_p.h>
19#include <QtCore/qhash.h>
20#include <QtCore/qstring.h>
26struct QSimplexVariable
28 QSimplexVariable() : result(0), index(0) {}
36
37
38
39
40
41
42
43
44
45
66 qreal leftHandSide(0);
68 QHash<QSimplexVariable *, qreal>::const_iterator iter;
69 for (iter = variables.constBegin(); iter != variables.constEnd(); ++iter) {
70 leftHandSide += iter.value() * iter.key()->result;
73 Q_ASSERT(constant > 0 || qFuzzyCompare(1, 1 + constant));
75 if ((leftHandSide == constant) || qAbs(leftHandSide - constant) < 0.0000001)
80 return leftHandSide < constant;
82 return leftHandSide > constant;
124 bool setConstraints(
const QList<QSimplexConstraint *> &constraints);
131 inline qreal valueAt(
int row,
int column);
132 inline void setValueAt(
int row,
int column, qreal value);
133 void clearRow(
int rowIndex);
134 void clearColumns(
int first,
int last);
135 void combineRows(
int toIndex,
int fromIndex, qreal factor);
138 bool simplifyConstraints(QList<QSimplexConstraint *> *constraints);
139 int findPivotColumn();
140 int pivotRowForColumn(
int column);
141 void reducedRowEchelon();
145 void clearDataStructures();
146 void solveMaxHelper();
147 enum SolverFactor { Minimum = -1, Maximum = 1 };
148 qreal solver(SolverFactor factor);
149 void collectResults();
151 QList<QSimplexConstraint *> constraints;
152 QList<QSimplexVariable *> variables;
162inline qreal
QSimplex::valueAt(
int rowIndex,
int columnIndex)
164 return matrix[rowIndex * columns + columnIndex];
167inline void QSimplex::setValueAt(
int rowIndex,
int columnIndex, qreal value)
169 matrix[rowIndex * columns + columnIndex] = value;
The QGraphicsAnchorLayout class provides a layout where one can anchor widgets together in Graphics V...
void setSizePolicy(QSizePolicy::Policy policy)
~QGraphicsAnchorPrivate()
QSizePolicy::Policy sizePolicy
static QGraphicsAnchorPrivate * get(QGraphicsAnchor *q)
QGraphicsAnchorLayoutPrivate * layoutPrivate
void setSpacing(qreal value)
The QGraphicsAnchor class represents an anchor between two items in a QGraphicsAnchorLayout.
The QGraphicsLayout class provides the base class for all layouts in Graphics View.
void setDefaultSpacing(Qt::Orientation o, qreal spacing)
bool operator==(const QLayoutStyleInfo &other) const
bool operator!=(const QLayoutStyleInfo &other) const
qreal perItemSpacing(QSizePolicy::ControlType control1, QSizePolicy::ControlType control2, Qt::Orientation orientation) const
qreal defaultSpacing(Qt::Orientation o) const
QLayoutStyleInfo(QStyle *style, QWidget *widget)
bool setConstraints(const QList< QSimplexConstraint * > &constraints)
void setObjective(QSimplexConstraint *objective)
QSet< AnchorData * > negatives
QSet< AnchorData * > positives
QSimplexConstraint * constraint(const GraphPath &path) const
Combined button and popup list for selecting options.
QT_REQUIRE_CONFIG(animation)
Q_DECLARE_TYPEINFO(GraphPath, Q_RELOCATABLE_TYPE)
QT_REQUIRE_CONFIG(graphicsview)
Q_DECLARE_INTERFACE(QNetworkAccessBackendFactory, QNetworkAccessBackendFactory_iid)
QHash< QSimplexVariable *, qreal > variables
std::pair< QSimplexVariable *, qreal > helper
QSimplexVariable * artificial
virtual void updateChildrenSizes()
void refreshSizeHints(const QLayoutStyleInfo *styleInfo=nullptr)
QGraphicsLayoutItem * item
QGraphicsAnchor * graphicsAnchor
AnchorVertexPair(AnchorVertex *v1, AnchorVertex *v2, AnchorData *data)
AnchorData * m_removedAnchor
QList< AnchorData * > m_secondAnchors
QList< AnchorData * > m_firstAnchors
AnchorVertex(QGraphicsLayoutItem *item, Qt::AnchorPoint edge)
virtual ~AnchorVertex()=default
QGraphicsLayoutItem * m_item
virtual void updateChildrenSizes() override
ParallelAnchorData(AnchorData *first, AnchorData *second)
QList< QSimplexConstraint * > m_secondConstraints
bool calculateSizeHints()
QList< QSimplexConstraint * > m_firstConstraints
bool secondForward() const
virtual void updateChildrenSizes() override
const QList< AnchorData * > m_edges
SequentialAnchorData(const QList< AnchorVertex * > &vertices, const QList< AnchorData * > &edges)
void calculateSizeHints()