]> granicus.if.org Git - graphviz/commitdiff
Add the vpsc library for IPSEPCOLA features
authorerg <devnull@localhost>
Fri, 28 Apr 2006 19:03:46 +0000 (19:03 +0000)
committererg <devnull@localhost>
Fri, 28 Apr 2006 19:03:46 +0000 (19:03 +0000)
lib/vpsc/constraint.cpp [new file with mode: 0644]

diff --git a/lib/vpsc/constraint.cpp b/lib/vpsc/constraint.cpp
new file mode 100644 (file)
index 0000000..cc96955
--- /dev/null
@@ -0,0 +1,52 @@
+/**
+ * \brief A constraint determines a minimum or exact spacing required between
+ * two variables.
+ *
+ * Authors:
+ *   Tim Dwyer <tgdwyer@gmail.com>
+ *
+ * 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.
+ */
+
+#include "constraint.h"
+#include <cassert>
+Constraint::Constraint(Variable *left, Variable *right, double gap, bool equality)
+: left(left),
+  right(right),
+  gap(gap),
+  timeStamp(0),
+  active(false),
+  visited(false),
+  equality(equality)
+{
+       left->out.push_back(this);
+       right->in.push_back(this);
+}
+Constraint::~Constraint() {
+       Constraints::iterator i;
+       for(i=left->out.begin(); i!=left->out.end(); i++) {
+               if(*i==this) break;
+       }
+       left->out.erase(i);
+       for(i=right->in.begin(); i!=right->in.end(); i++) {
+               if(*i==this) break;
+       }
+       right->in.erase(i);
+}
+std::ostream& operator <<(std::ostream &os, const Constraint &c)
+{
+       if(&c==NULL) {
+               os<<"NULL";
+       } else {
+               os<<*c.left<<"+"<<c.gap<<"<="<<*c.right<<"("<<c.slack()<<")"<<(c.active?"-active":"");
+       }
+       return os;
+}