X-Git-Url: http://git.megacz.com/?p=anneal.git;a=blobdiff_plain;f=src%2FGeom.java;h=316e33468c56d865ed0bd5a6378d13fe14abdf14;hp=42abd82b039ef1fd01ec3049e35efa33814fdd93;hb=a3aad0bab8b523ead43362277b5d04a14e178cfb;hpb=1a864cc577c2b31049cd46f4fd9ed703802d7d17 diff --git a/src/Geom.java b/src/Geom.java index 42abd82..316e334 100644 --- a/src/Geom.java +++ b/src/Geom.java @@ -198,26 +198,36 @@ public class Geom implements Iterable { public E bound_to = this; - public M bound_m = new M(); public void bind(E e) { bind(e, new M()); } - public void bind(E e2, M m) { - E e1 = this; - while(e1.bound_to != e1) e1 = e1.bound_to; - while(e2.bound_to != e2) e2 = e2.bound_to; - e1.bound_to = e2; + public void bind(E e, M m) { + E old = this.bound_to; + this.bound_to = e.bound_to; + e.bound_to = old; } public void dobind() { - if (bound_to == this) return; - E ex = this; - M m = new M(); - while(ex.bound_to != ex) { m = m.times(ex.bound_m); ex = ex.bound_to; } - p1.bind(ex.bound_to.p1); - p2.bind(ex.bound_to.p2); + for(E ex = bound_to; ex != this; ex = ex.bound_to) { + p1.bind(ex.p1); + p2.bind(ex.p2); + } } + public boolean destroyed = false; public void shatter() { + if (destroyed) return; + /* + HashSet eh = new HashSet(); + eh.add(this); + for(E ex = bound_to; ex != this; ex = ex.bound_to) eh.add(ex); + E[] es = (E[])eh.toArray(new E[0]); + */ + destroy(); + pair.shatter(); + for(E ex = bound_to; ex != this; ex = ex.bound_to) ex.shatter(); + } + public void destroy() { + this.destroyed = true; } private void sync() {