19#include <QtWidgets/private/qtwidgetsglobal_p.h>
20#include <QtCore/qhash.h>
21#include <QtCore/qstring.h>
27struct QSimplexVariable
29 QSimplexVariable() : result(0), index(0) {}
34 QT_DECLARE_RO5_SMF_AS_DEFAULTED(QSimplexVariable)
38struct QConcreteSimplexVariable
final : QSimplexVariable
43
44
45
46
47
48
49
50
51
52
75 qreal leftHandSide(0);
77 for (
auto iter = variables.cbegin(); iter != variables.cend(); ++iter) {
78 leftHandSide += iter.value() * iter.key()->result;
81 Q_ASSERT(constant > 0 || qFuzzyCompare(1, 1 + constant));
83 if ((leftHandSide == constant) || qAbs(leftHandSide - constant) < 0.0000001)
88 return leftHandSide < constant;
90 return leftHandSide > constant;
131 bool setConstraints(
const QList<QSimplexConstraint *> &constraints);
138 inline qreal valueAt(
int row,
int column);
139 inline void setValueAt(
int row,
int column, qreal value);
140 void clearRow(
int rowIndex);
141 void clearColumns(
int first,
int last);
142 void combineRows(
int toIndex,
int fromIndex, qreal factor);
145 bool simplifyConstraints(QList<QSimplexConstraint *> *constraints);
146 int findPivotColumn();
147 int pivotRowForColumn(
int column);
148 void reducedRowEchelon();
152 void clearDataStructures();
153 void solveMaxHelper();
154 enum SolverFactor { Minimum = -1, Maximum = 1 };
155 qreal solver(SolverFactor factor);
156 void collectResults();
158 QList<QSimplexConstraint *> constraints;
159 QList<QSimplexVariable *> variables;
169inline qreal
QSimplex::valueAt(
int rowIndex,
int columnIndex)
171 return matrix[rowIndex * columns + columnIndex];
174inline void QSimplex::setValueAt(
int rowIndex,
int columnIndex, qreal value)
176 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
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
QConcreteSimplexVariable * artificial
std::pair< QConcreteSimplexVariable *, qreal > helper
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()