34 template <
class T,
class TCompare>
class PairingHeap;
39 class CompareConstraints;
42 struct PositionStats {
43 PositionStats() : scale(0), AB(0), AD(0), A2(0) {}
44 void addVariable(Variable*
const v);
55 typedef Variables::iterator Vit;
56 typedef Constraints::iterator Cit;
57 typedef Constraints::const_iterator Cit_const;
59 friend std::ostream& operator <<(std::ostream &os,
const Block &b);
66 Block(Blocks *blocks, Variable*
const v=
nullptr);
68 Constraint* findMinLM();
69 Constraint* findMinLMBetween(Variable*
const lv, Variable*
const rv);
70 Constraint* findMinInConstraint();
71 Constraint* findMinOutConstraint();
72 void deleteMinInConstraint();
73 void deleteMinOutConstraint();
74 void updateWeightedPosition();
75 void merge(Block *b, Constraint *c,
double dist);
76 Block* merge(Block *b, Constraint *c);
77 void mergeIn(Block *b);
78 void mergeOut(Block *b);
79 void split(Block *&l, Block *&r, Constraint *c);
80 Constraint* splitBetween(Variable* vl, Variable* vr, Block* &lb, Block* &rb);
81 void setUpInConstraints();
82 void setUpOutConstraints();
86 PairingHeap<Constraint*,CompareConstraints> *in;
87 PairingHeap<Constraint*,CompareConstraints> *out;
88 bool getActivePathBetween(
Constraints& path, Variable
const* u,
89 Variable
const* v, Variable
const *w)
const;
90 bool isActiveDirectedPathBetween(
91 Variable
const* u, Variable
const* v)
const;
92 bool getActiveDirectedPathBetween(
Constraints& path, Variable
const * u, Variable
const * v)
const;
94 typedef enum {
NONE, LEFT,
RIGHT} Direction;
95 typedef std::pair<double, Constraint*> Pair;
96 void reset_active_lm(Variable*
const v, Variable*
const u);
97 void list_active(Variable*
const v, Variable*
const u);
98 double compute_dfdv(Variable*
const v, Variable*
const u);
99 double compute_dfdv(Variable*
const v, Variable*
const u, Constraint *&min_lm);
100 bool split_path(Variable*, Variable*
const, Variable*
const,
101 Constraint* &min_lm,
bool desperation);
102 bool canFollowLeft(Constraint
const* c, Variable
const* last)
const;
103 bool canFollowRight(Constraint
const* c, Variable
const* last)
const;
104 void populateSplitBlock(Block *b, Variable* v, Variable
const* u);
105 void addVariable(Variable* v);
106 void setUpConstraintHeap(PairingHeap<Constraint*,CompareConstraints>* &h,
bool in);
113 #endif // VPSC_BLOCK_H libvpsc: Variable Placement with Separation Constraints quadratic program solver library.
Definition: assertions.h:61
std::vector< Variable * > Variables
A vector of pointers to Variable objects.
Definition: constraint.h:38
std::vector< Constraint * > Constraints
A vector of pointers to Constraint objects.
Definition: constraint.h:125
Lateral constraints imply only a separation: