X-Git-Url: http://git.megacz.com/?p=anneal.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fqfat%2FMesh.java;h=0df0072ef90ec58a1230f75e224a825e98d6dcb0;hp=5dd2aea5476024d6db522e2aa3c02d6741548eb7;hb=3e0fc8c7a5658abf2c460fc4eae44d137748e4e7;hpb=6741954c1976878336a17457936c0669ce24e594 diff --git a/src/edu/berkeley/qfat/Mesh.java b/src/edu/berkeley/qfat/Mesh.java index 5dd2aea..0df0072 100644 --- a/src/edu/berkeley/qfat/Mesh.java +++ b/src/edu/berkeley/qfat/Mesh.java @@ -319,33 +319,48 @@ public class Mesh implements Iterable { } public class BindingGroup { - private HashSet ess = new HashSet(); + private HashSet left = new HashSet(); + private HashSet right = new HashSet(); public BindingGroup() { } public BindingGroup(E e) { - ess.add(e); + left.add(e); } public void add(E e) { if (e.bg != null) { - for(E ex : e.bg.ess) { - ex.bg = null; - add(ex); + if (e.bg == this) return; + for(E ex : e.bg.left) { + ex.bg = this; + left.add(ex); + } + for(E ex : e.bg.right) { + ex.bg = this; + right.add(ex); } } else { - ess.add(e); + left.add(e); e.bg = this; } } public void dobind(E e) { - for(E ex : ess) { + // assumes e is part of the "left" set + for(E ex : left) { if (ex==e) continue; e.p1.bind(ex.p1); e.p2.bind(ex.p2); } + for(E ex : right) { + if (ex==e) continue; + e.p1.bind(ex.pair.p1); + e.p2.bind(ex.pair.p2); + } } public void shatter(BindingGroup bg1, BindingGroup bg2) { - for(E e : ess) { + for(E e : left) { e.shatter(e.midpoint(), bg1, bg2); } + for(E e : right) { + e.shatter(e.midpoint(), bg2, bg1); /* swap correct? */ + } } }