From: erg Date: Fri, 28 Apr 2006 19:03:46 +0000 (+0000) Subject: Add the vpsc library for IPSEPCOLA features X-Git-Tag: LAST_LIBGRAPH~32^2~6670 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5662584a00d224dbfc0510fa97fcc96f0dfdbb1e;p=graphviz Add the vpsc library for IPSEPCOLA features --- diff --git a/lib/vpsc/blocks.h b/lib/vpsc/blocks.h new file mode 100644 index 000000000..b23995eeb --- /dev/null +++ b/lib/vpsc/blocks.h @@ -0,0 +1,59 @@ +/** + * \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 + * + * 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: http://sourceforge.net/projects/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. + */ + +#ifndef SEEN_REMOVEOVERLAP_BLOCKS_H +#define SEEN_REMOVEOVERLAP_BLOCKS_H + +#ifdef RECTANGLE_OVERLAP_LOGGING +#define LOGFILE "cRectangleOverlap.log" +#endif + +#include +#include + +class Block; +class Variable; +class 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 +{ +public: + Blocks(const int n, Variable *vs[]); + ~Blocks(void); + void mergeLeft(Block *r); + void mergeRight(Block *l); + void split(Block *b, Block *&l, Block *&r, Constraint *c); + std::list *totalOrder(); + void cleanup(); + double cost(); +private: + void dfsVisit(Variable *v, std::list *order); + void removeBlock(Block *doomed); + Variable **vs; + int nvs; +}; + +extern long blockTimeCtr; +#endif // SEEN_REMOVEOVERLAP_BLOCKS_H