12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- /**
- * \brief A block structure defined over the variables
- *
- * A block structure defined over the variables such that each block contains
- * 1 or more variables, with the invariant that all constraints inside a block
- * are satisfied by keeping the variables fixed relative to one another
- *
- * Authors:
- * Tim Dwyer <[email protected]>
- *
- * Copyright (C) 2005 Authors
- *
- * This version is released under the CPL (Common Public License) with
- * the Graphviz distribution.
- * A version is also available under the LGPL as part of the Adaptagrams
- * project: https://github.com/mjwybrow/adaptagrams.
- * If you make improvements or bug fixes to this code it would be much
- * appreciated if you could also contribute those changes back to the
- * Adaptagrams repository.
- */
- #pragma once
- #define LOGFILE "cRectangleOverlap.log"
- #include <set>
- #include <list>
- class Block;
- struct Variable;
- struct Constraint;
- /**
- * A block structure defined over the variables such that each block contains
- * 1 or more variables, with the invariant that all constraints inside a block
- * are satisfied by keeping the variables fixed relative to one another
- */
- class Blocks : public std::set<Block*>
- {
- public:
- Blocks(const int n, Variable *vs[]);
- ~Blocks();
- void mergeLeft(Block *r);
- void mergeRight(Block *l);
- void split(Block *b, Block *&l, Block *&r, Constraint *c);
- std::list<Variable*> totalOrder();
- void cleanup();
- double cost();
- private:
- void dfsVisit(Variable *v, std::list<Variable*> &order);
- void removeBlock(Block *doomed);
- Variable **vs;
- int nvs;
- };
- extern long blockTimeCtr;
|