E next; // next half-edge
E pair; // partner half-edge
+
+ public E bound_to = this;
+
+ public void bind(E e) { bind(e, new M()); }
+ 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() {
+ 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<E> eh = new HashSet<E>();
+ 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() {
this.prev.next = this;
this.next.prev = this;
public final E e1;
public final int color;
- public void bind(T t2, int rot) {
- // FIXME
- }
-
T(E e1) {
this.e1 = e1;
E e2 = e1.next;