33#ifndef RECTANGLE_OVERLAP_LOGGING
34 #define RECTANGLE_OVERLAP_LOGGING 0
41 for(
int i=0;i<nvs;i++) {
48 for (
Block *b : *
this) {
58 list<Variable*> order;
59 for(
int i=0;i<nvs;i++) {
62 for(
int i=0;i<nvs;i++) {
63 if(vs[i]->
in.empty()) {
64 dfsVisit(vs[i],order);
71void Blocks::dfsVisit(
Variable *v, list<Variable*> &order) {
74 if(!c->right->visited) {
75 dfsVisit(c->right, order);
80 f<<
" order="<<*v<<
"\n";
91 f<<
"mergeLeft called on "<<*r<<
"\n";
96 while (c !=
nullptr && c->
slack()<0) {
99 f<<
"mergeLeft on constraint: "<<*c<<
"\n";
105 if (r->
vars.size() < l->
vars.size()) {
118 f<<
"merged "<<*r<<
"\n";
127 f<<
"mergeRight called on "<<*l<<
"\n";
131 while (c !=
nullptr && c->
slack()<0) {
134 f<<
"mergeRight on constraint: "<<*c<<
"\n";
140 if (l->
vars.size() > r->
vars.size()) {
151 f<<
"merged "<<*l<<
"\n";
154void Blocks::removeBlock(
Block *doomed) {
159 for (
auto i = begin(); i != end();) {
177 f<<
"Split left: "<<*l<<
"\n";
178 f<<
"Split right: "<<*r<<
"\n";
199 for (
Block *b : *
this) {
static void out(agerrlevel_t level, const char *fmt, va_list args)
Report messages using a user-supplied or default write function.
#define RECTANGLE_OVERLAP_LOGGING
#define LOGFILE
A block structure defined over the variables.
Constraint * findMinInConstraint()
std::vector< Variable * > vars
void split(Block *&l, Block *&r, Constraint *c)
void deleteMinOutConstraint()
std::vector< Constraint * > in
void setUpOutConstraints()
void setUpInConstraints()
double desiredWeightedPosition()
Constraint * findMinOutConstraint()
void merge(Block *b, Constraint *c, double dist)
void deleteMinInConstraint()
void split(Block *b, Block *&l, Block *&r, Constraint *c)
std::list< Variable * > totalOrder()
Blocks(const int n, Variable *vs[])
void mergeRight(Block *l)
static void insert(PairHeap *h, Pair edge)
static int in(Extype_t lhs, Exid_t *rhs, Exdisc_t *disc)
static double dist(int dim, double *x, double *y)
A constraint determines a minimum or exact spacing required between two variables.