Merge branch 'master' of https://source.jalview.org/git/jalviewjs.git
[jalviewjs.git] / site / j2s / jssun / awt / geom / AreaOp.js
index bcbf36a..c95d6a9 100644 (file)
-Clazz.declarePackage ("jssun.awt.geom");\r
-Clazz.load (null, "jssun.awt.geom.AreaOp", ["java.lang.InternalError", "java.util.Arrays", "$.Vector", "jssun.awt.geom.ChainEnd", "$.CurveLink", "$.Edge"], function () {\r
-c$ = Clazz.declareType (jssun.awt.geom, "AreaOp");\r
-Clazz.defineMethod (c$, "calculate", \r
-function (left, right) {\r
-var edges =  new java.util.Vector ();\r
-jssun.awt.geom.AreaOp.addEdges (edges, left, 0);\r
-jssun.awt.geom.AreaOp.addEdges (edges, right, 1);\r
-edges = this.pruneEdges (edges);\r
-if (false) {\r
-System.out.println ("result: ");\r
-var numcurves = edges.size ();\r
-var curvelist = edges.toArray ( new Array (numcurves));\r
-for (var i = 0; i < numcurves; i++) {\r
-System.out.println ("curvelist[" + i + "] = " + curvelist[i]);\r
-}\r
-}return edges;\r
-}, "java.util.Vector,java.util.Vector");\r
-c$.addEdges = Clazz.defineMethod (c$, "addEdges", \r
- function (edges, curves, curvetag) {\r
-var enum_ = curves.elements ();\r
-while (enum_.hasMoreElements ()) {\r
-var c = enum_.nextElement ();\r
-if (c.getOrder () > 0) {\r
-edges.add ( new jssun.awt.geom.Edge (c, curvetag));\r
-}}\r
-}, "java.util.Vector,java.util.Vector,~N");\r
-Clazz.defineMethod (c$, "pruneEdges", \r
- function (edges) {\r
-var numedges = edges.size ();\r
-if (numedges < 2) {\r
-return edges;\r
-}var edgelist = edges.toArray ( new Array (numedges));\r
-java.util.Arrays.sort (edgelist, jssun.awt.geom.AreaOp.YXTopComparator);\r
-if (false) {\r
-System.out.println ("pruning: ");\r
-for (var i = 0; i < numedges; i++) {\r
-System.out.println ("edgelist[" + i + "] = " + edgelist[i]);\r
-}\r
-}var e;\r
-var left = 0;\r
-var right = 0;\r
-var cur = 0;\r
-var next = 0;\r
-var yrange =  Clazz.newDoubleArray (2, 0);\r
-var subcurves =  new java.util.Vector ();\r
-var chains =  new java.util.Vector ();\r
-var links =  new java.util.Vector ();\r
-while (left < numedges) {\r
-var y = yrange[0];\r
-for (cur = next = right - 1; cur >= left; cur--) {\r
-e = edgelist[cur];\r
-if (e.getCurve ().getYBot () > y) {\r
-if (next > cur) {\r
-edgelist[next] = e;\r
-}next--;\r
-}}\r
-left = next + 1;\r
-if (left >= right) {\r
-if (right >= numedges) {\r
-break;\r
-}y = edgelist[right].getCurve ().getYTop ();\r
-if (y > yrange[0]) {\r
-jssun.awt.geom.AreaOp.finalizeSubCurves (subcurves, chains);\r
-}yrange[0] = y;\r
-}while (right < numedges) {\r
-e = edgelist[right];\r
-if (e.getCurve ().getYTop () > y) {\r
-break;\r
-}right++;\r
-}\r
-yrange[1] = edgelist[left].getCurve ().getYBot ();\r
-if (right < numedges) {\r
-y = edgelist[right].getCurve ().getYTop ();\r
-if (yrange[1] > y) {\r
-yrange[1] = y;\r
-}}if (false) {\r
-System.out.println ("current line: y = [" + yrange[0] + ", " + yrange[1] + "]");\r
-for (cur = left; cur < right; cur++) {\r
-System.out.println ("  " + edgelist[cur]);\r
-}\r
-}var nexteq = 1;\r
-for (cur = left; cur < right; cur++) {\r
-e = edgelist[cur];\r
-e.setEquivalence (0);\r
-for (next = cur; next > left; next--) {\r
-var prevedge = edgelist[next - 1];\r
-var ordering = e.compareTo (prevedge, yrange);\r
-if (yrange[1] <= yrange[0]) {\r
-throw  new InternalError ("backstepping to " + yrange[1] + " from " + yrange[0]);\r
-}if (ordering >= 0) {\r
-if (ordering == 0) {\r
-var eq = prevedge.getEquivalence ();\r
-if (eq == 0) {\r
-eq = nexteq++;\r
-prevedge.setEquivalence (eq);\r
-}e.setEquivalence (eq);\r
-}break;\r
-}edgelist[next] = prevedge;\r
-}\r
-edgelist[next] = e;\r
-}\r
-if (false) {\r
-System.out.println ("current sorted line: y = [" + yrange[0] + ", " + yrange[1] + "]");\r
-for (cur = left; cur < right; cur++) {\r
-System.out.println ("  " + edgelist[cur]);\r
-}\r
-}this.newRow ();\r
-var ystart = yrange[0];\r
-var yend = yrange[1];\r
-for (cur = left; cur < right; cur++) {\r
-e = edgelist[cur];\r
-var etag;\r
-var eq = e.getEquivalence ();\r
-if (eq != 0) {\r
-var origstate = this.getState ();\r
-etag = (origstate == 1 ? -1 : 1);\r
-var activematch = null;\r
-var longestmatch = e;\r
-var furthesty = yend;\r
-do {\r
-this.classify (e);\r
-if (activematch == null && e.isActiveFor (ystart, etag)) {\r
-activematch = e;\r
-}y = e.getCurve ().getYBot ();\r
-if (y > furthesty) {\r
-longestmatch = e;\r
-furthesty = y;\r
-}} while (++cur < right && (e = edgelist[cur]).getEquivalence () == eq);\r
---cur;\r
-if (this.getState () == origstate) {\r
-etag = 0;\r
-} else {\r
-e = (activematch != null ? activematch : longestmatch);\r
-}} else {\r
-etag = this.classify (e);\r
-}if (etag != 0) {\r
-e.record (yend, etag);\r
-links.add ( new jssun.awt.geom.CurveLink (e.getCurve (), ystart, yend, etag));\r
-}}\r
-if (this.getState () != -1) {\r
-System.out.println ("Still inside at end of active edge list!");\r
-System.out.println ("num curves = " + (right - left));\r
-System.out.println ("num links = " + links.size ());\r
-System.out.println ("y top = " + yrange[0]);\r
-if (right < numedges) {\r
-System.out.println ("y top of next curve = " + edgelist[right].getCurve ().getYTop ());\r
-} else {\r
-System.out.println ("no more curves");\r
-}for (cur = left; cur < right; cur++) {\r
-e = edgelist[cur];\r
-System.out.println (e);\r
-var eq = e.getEquivalence ();\r
-if (eq != 0) {\r
-System.out.println ("  was equal to " + eq + "...");\r
-}}\r
-}if (false) {\r
-System.out.println ("new links:");\r
-for (var i = 0; i < links.size (); i++) {\r
-var link = links.elementAt (i);\r
-System.out.println ("  " + link.getSubCurve ());\r
-}\r
-}jssun.awt.geom.AreaOp.resolveLinks (subcurves, chains, links);\r
-links.clear ();\r
-yrange[0] = yend;\r
-}\r
-jssun.awt.geom.AreaOp.finalizeSubCurves (subcurves, chains);\r
-var ret =  new java.util.Vector ();\r
-var enum_ = subcurves.elements ();\r
-while (enum_.hasMoreElements ()) {\r
-var link = enum_.nextElement ();\r
-ret.add (link.getMoveto ());\r
-var nextlink = link;\r
-while ((nextlink = nextlink.getNext ()) != null) {\r
-if (!link.absorb (nextlink)) {\r
-ret.add (link.getSubCurve ());\r
-link = nextlink;\r
-}}\r
-ret.add (link.getSubCurve ());\r
-}\r
-return ret;\r
-}, "java.util.Vector");\r
-c$.finalizeSubCurves = Clazz.defineMethod (c$, "finalizeSubCurves", \r
-function (subcurves, chains) {\r
-var numchains = chains.size ();\r
-if (numchains == 0) {\r
-return;\r
-}if ((numchains & 1) != 0) {\r
-throw  new InternalError ("Odd number of chains!");\r
-}var endlist =  new Array (numchains);\r
-chains.toArray (endlist);\r
-for (var i = 1; i < numchains; i += 2) {\r
-var open = endlist[i - 1];\r
-var close = endlist[i];\r
-var subcurve = open.linkTo (close);\r
-if (subcurve != null) {\r
-subcurves.add (subcurve);\r
-}}\r
-chains.clear ();\r
-}, "java.util.Vector,java.util.Vector");\r
-c$.resolveLinks = Clazz.defineMethod (c$, "resolveLinks", \r
-function (subcurves, chains, links) {\r
-var numlinks = links.size ();\r
-var linklist;\r
-if (numlinks == 0) {\r
-linklist = jssun.awt.geom.AreaOp.EmptyLinkList;\r
-} else {\r
-if ((numlinks & 1) != 0) {\r
-throw  new InternalError ("Odd number of new curves!");\r
-}linklist =  new Array (numlinks + 2);\r
-links.toArray (linklist);\r
-}var numchains = chains.size ();\r
-var endlist;\r
-if (numchains == 0) {\r
-endlist = jssun.awt.geom.AreaOp.EmptyChainList;\r
-} else {\r
-if ((numchains & 1) != 0) {\r
-throw  new InternalError ("Odd number of chains!");\r
-}endlist =  new Array (numchains + 2);\r
-chains.toArray (endlist);\r
-}var curchain = 0;\r
-var curlink = 0;\r
-chains.clear ();\r
-var chain = endlist[0];\r
-var nextchain = endlist[1];\r
-var link = linklist[0];\r
-var nextlink = linklist[1];\r
-while (chain != null || link != null) {\r
-var connectchains = (link == null);\r
-var connectlinks = (chain == null);\r
-if (!connectchains && !connectlinks) {\r
-connectchains = ((curchain & 1) == 0 && chain.getX () == nextchain.getX ());\r
-connectlinks = ((curlink & 1) == 0 && link.getX () == nextlink.getX ());\r
-if (!connectchains && !connectlinks) {\r
-var cx = chain.getX ();\r
-var lx = link.getX ();\r
-connectchains = (nextchain != null && cx < lx && jssun.awt.geom.AreaOp.obstructs (nextchain.getX (), lx, curchain));\r
-connectlinks = (nextlink != null && lx < cx && jssun.awt.geom.AreaOp.obstructs (nextlink.getX (), cx, curlink));\r
-}}if (connectchains) {\r
-var subcurve = chain.linkTo (nextchain);\r
-if (subcurve != null) {\r
-subcurves.add (subcurve);\r
-}curchain += 2;\r
-chain = endlist[curchain];\r
-nextchain = endlist[curchain + 1];\r
-}if (connectlinks) {\r
-var openend =  new jssun.awt.geom.ChainEnd (link, null);\r
-var closeend =  new jssun.awt.geom.ChainEnd (nextlink, openend);\r
-openend.setOtherEnd (closeend);\r
-chains.add (openend);\r
-chains.add (closeend);\r
-curlink += 2;\r
-link = linklist[curlink];\r
-nextlink = linklist[curlink + 1];\r
-}if (!connectchains && !connectlinks) {\r
-chain.addLink (link);\r
-chains.add (chain);\r
-curchain++;\r
-chain = nextchain;\r
-nextchain = endlist[curchain + 1];\r
-curlink++;\r
-link = nextlink;\r
-nextlink = linklist[curlink + 1];\r
-}}\r
-if ((chains.size () & 1) != 0) {\r
-System.out.println ("Odd number of chains!");\r
-}}, "java.util.Vector,java.util.Vector,java.util.Vector");\r
-c$.obstructs = Clazz.defineMethod (c$, "obstructs", \r
-function (v1, v2, phase) {\r
-return (((phase & 1) == 0) ? (v1 <= v2) : (v1 < v2));\r
-}, "~N,~N,~N");\r
-c$.$AreaOp$1$ = function () {\r
-Clazz.pu$h(self.c$);\r
-c$ = Clazz.declareAnonymous (jssun.awt.geom, "AreaOp$1", null, java.util.Comparator);\r
-Clazz.overrideMethod (c$, "compare", \r
-function (o1, o2) {\r
-var c1 = (o1).getCurve ();\r
-var c2 = (o2).getCurve ();\r
-var v1;\r
-var v2;\r
-if ((v1 = c1.getYTop ()) == (v2 = c2.getYTop ())) {\r
-if ((v1 = c1.getXTop ()) == (v2 = c2.getXTop ())) {\r
-return 0;\r
-}}if (v1 < v2) {\r
-return -1;\r
-}return 1;\r
-}, "~O,~O");\r
-c$ = Clazz.p0p ();\r
-};\r
-Clazz.pu$h(self.c$);\r
-c$ = Clazz.decorateAsClass (function () {\r
-this.inLeft = false;\r
-this.inRight = false;\r
-this.inResult = false;\r
-Clazz.instantialize (this, arguments);\r
-}, jssun.awt.geom.AreaOp, "CAGOp", jssun.awt.geom.AreaOp);\r
-Clazz.overrideMethod (c$, "newRow", \r
-function () {\r
-this.inLeft = false;\r
-this.inRight = false;\r
-this.inResult = false;\r
-});\r
-Clazz.overrideMethod (c$, "classify", \r
-function (a) {\r
-if (a.getCurveTag () == 0) {\r
-this.inLeft = !this.inLeft;\r
-} else {\r
-this.inRight = !this.inRight;\r
-}var b = this.newClassification (this.inLeft, this.inRight);\r
-if (this.inResult == b) {\r
-return 0;\r
-}this.inResult = b;\r
-return (b ? 1 : -1);\r
-}, "jssun.awt.geom.Edge");\r
-Clazz.overrideMethod (c$, "getState", \r
-function () {\r
-return (this.inResult ? 1 : -1);\r
-});\r
-c$ = Clazz.p0p ();\r
-Clazz.pu$h(self.c$);\r
-c$ = Clazz.declareType (jssun.awt.geom.AreaOp, "AddOp", jssun.awt.geom.AreaOp.CAGOp);\r
-Clazz.overrideMethod (c$, "newClassification", \r
-function (a, b) {\r
-return (a || b);\r
-}, "~B,~B");\r
-c$ = Clazz.p0p ();\r
-Clazz.pu$h(self.c$);\r
-c$ = Clazz.declareType (jssun.awt.geom.AreaOp, "SubOp", jssun.awt.geom.AreaOp.CAGOp);\r
-Clazz.overrideMethod (c$, "newClassification", \r
-function (a, b) {\r
-return (a && !b);\r
-}, "~B,~B");\r
-c$ = Clazz.p0p ();\r
-Clazz.pu$h(self.c$);\r
-c$ = Clazz.declareType (jssun.awt.geom.AreaOp, "IntOp", jssun.awt.geom.AreaOp.CAGOp);\r
-Clazz.overrideMethod (c$, "newClassification", \r
-function (a, b) {\r
-return (a && b);\r
-}, "~B,~B");\r
-c$ = Clazz.p0p ();\r
-Clazz.pu$h(self.c$);\r
-c$ = Clazz.declareType (jssun.awt.geom.AreaOp, "XorOp", jssun.awt.geom.AreaOp.CAGOp);\r
-Clazz.overrideMethod (c$, "newClassification", \r
-function (a, b) {\r
-return (a != b);\r
-}, "~B,~B");\r
-c$ = Clazz.p0p ();\r
-Clazz.pu$h(self.c$);\r
-c$ = Clazz.decorateAsClass (function () {\r
-this.count = 0;\r
-Clazz.instantialize (this, arguments);\r
-}, jssun.awt.geom.AreaOp, "NZWindOp", jssun.awt.geom.AreaOp);\r
-Clazz.overrideMethod (c$, "newRow", \r
-function () {\r
-this.count = 0;\r
-});\r
-Clazz.overrideMethod (c$, "classify", \r
-function (a) {\r
-var b = this.count;\r
-var c = (b == 0 ? 1 : 0);\r
-b += a.getCurve ().getDirection ();\r
-this.count = b;\r
-return (b == 0 ? -1 : c);\r
-}, "jssun.awt.geom.Edge");\r
-Clazz.overrideMethod (c$, "getState", \r
-function () {\r
-return ((this.count == 0) ? -1 : 1);\r
-});\r
-c$ = Clazz.p0p ();\r
-Clazz.pu$h(self.c$);\r
-c$ = Clazz.decorateAsClass (function () {\r
-this.inside = false;\r
-Clazz.instantialize (this, arguments);\r
-}, jssun.awt.geom.AreaOp, "EOWindOp", jssun.awt.geom.AreaOp);\r
-Clazz.overrideMethod (c$, "newRow", \r
-function () {\r
-this.inside = false;\r
-});\r
-Clazz.overrideMethod (c$, "classify", \r
-function (a) {\r
-var b = !this.inside;\r
-this.inside = b;\r
-return (b ? 1 : -1);\r
-}, "jssun.awt.geom.Edge");\r
-Clazz.overrideMethod (c$, "getState", \r
-function () {\r
-return (this.inside ? 1 : -1);\r
-});\r
-c$ = Clazz.p0p ();\r
-Clazz.defineStatics (c$,\r
-"CTAG_LEFT", 0,\r
-"CTAG_RIGHT", 1,\r
-"ETAG_IGNORE", 0,\r
-"ETAG_ENTER", 1,\r
-"ETAG_EXIT", -1,\r
-"RSTAG_INSIDE", 1,\r
-"RSTAG_OUTSIDE", -1);\r
-c$.YXTopComparator = c$.prototype.YXTopComparator = ((Clazz.isClassDefined ("jssun.awt.geom.AreaOp$1") ? 0 : jssun.awt.geom.AreaOp.$AreaOp$1$ ()), Clazz.innerTypeInstance (jssun.awt.geom.AreaOp$1, this, null));\r
-c$.EmptyLinkList = c$.prototype.EmptyLinkList =  new Array (2);\r
-c$.EmptyChainList = c$.prototype.EmptyChainList =  new Array (2);\r
-});\r
+Clazz.declarePackage ("jssun.awt.geom");
+Clazz.load (null, "jssun.awt.geom.AreaOp", ["java.lang.InternalError", "java.util.Arrays", "$.Vector", "jssun.awt.geom.ChainEnd", "$.CurveLink", "$.Edge"], function () {
+c$ = Clazz.declareType (jssun.awt.geom, "AreaOp");
+Clazz.defineMethod (c$, "calculate", 
+function (left, right) {
+var edges =  new java.util.Vector ();
+jssun.awt.geom.AreaOp.addEdges (edges, left, 0);
+jssun.awt.geom.AreaOp.addEdges (edges, right, 1);
+edges = this.pruneEdges (edges);
+if (false) {
+System.out.println ("result: ");
+var numcurves = edges.size ();
+var curvelist = edges.toArray ( new Array (numcurves));
+for (var i = 0; i < numcurves; i++) {
+System.out.println ("curvelist[" + i + "] = " + curvelist[i]);
+}
+}return edges;
+}, "java.util.Vector,java.util.Vector");
+c$.addEdges = Clazz.defineMethod (c$, "addEdges", 
+ function (edges, curves, curvetag) {
+var enum_ = curves.elements ();
+while (enum_.hasMoreElements ()) {
+var c = enum_.nextElement ();
+if (c.getOrder () > 0) {
+edges.add ( new jssun.awt.geom.Edge (c, curvetag));
+}}
+}, "java.util.Vector,java.util.Vector,~N");
+Clazz.defineMethod (c$, "pruneEdges", 
+ function (edges) {
+var numedges = edges.size ();
+if (numedges < 2) {
+return edges;
+}var edgelist = edges.toArray ( new Array (numedges));
+java.util.Arrays.sort (edgelist, jssun.awt.geom.AreaOp.YXTopComparator);
+if (false) {
+System.out.println ("pruning: ");
+for (var i = 0; i < numedges; i++) {
+System.out.println ("edgelist[" + i + "] = " + edgelist[i]);
+}
+}var e;
+var left = 0;
+var right = 0;
+var cur = 0;
+var next = 0;
+var yrange =  Clazz.newDoubleArray (2, 0);
+var subcurves =  new java.util.Vector ();
+var chains =  new java.util.Vector ();
+var links =  new java.util.Vector ();
+while (left < numedges) {
+var y = yrange[0];
+for (cur = next = right - 1; cur >= left; cur--) {
+e = edgelist[cur];
+if (e.getCurve ().getYBot () > y) {
+if (next > cur) {
+edgelist[next] = e;
+}next--;
+}}
+left = next + 1;
+if (left >= right) {
+if (right >= numedges) {
+break;
+}y = edgelist[right].getCurve ().getYTop ();
+if (y > yrange[0]) {
+jssun.awt.geom.AreaOp.finalizeSubCurves (subcurves, chains);
+}yrange[0] = y;
+}while (right < numedges) {
+e = edgelist[right];
+if (e.getCurve ().getYTop () > y) {
+break;
+}right++;
+}
+yrange[1] = edgelist[left].getCurve ().getYBot ();
+if (right < numedges) {
+y = edgelist[right].getCurve ().getYTop ();
+if (yrange[1] > y) {
+yrange[1] = y;
+}}if (false) {
+System.out.println ("current line: y = [" + yrange[0] + ", " + yrange[1] + "]");
+for (cur = left; cur < right; cur++) {
+System.out.println ("  " + edgelist[cur]);
+}
+}var nexteq = 1;
+for (cur = left; cur < right; cur++) {
+e = edgelist[cur];
+e.setEquivalence (0);
+for (next = cur; next > left; next--) {
+var prevedge = edgelist[next - 1];
+var ordering = e.compareTo (prevedge, yrange);
+if (yrange[1] <= yrange[0]) {
+throw  new InternalError ("backstepping to " + yrange[1] + " from " + yrange[0]);
+}if (ordering >= 0) {
+if (ordering == 0) {
+var eq = prevedge.getEquivalence ();
+if (eq == 0) {
+eq = nexteq++;
+prevedge.setEquivalence (eq);
+}e.setEquivalence (eq);
+}break;
+}edgelist[next] = prevedge;
+}
+edgelist[next] = e;
+}
+if (false) {
+System.out.println ("current sorted line: y = [" + yrange[0] + ", " + yrange[1] + "]");
+for (cur = left; cur < right; cur++) {
+System.out.println ("  " + edgelist[cur]);
+}
+}this.newRow ();
+var ystart = yrange[0];
+var yend = yrange[1];
+for (cur = left; cur < right; cur++) {
+e = edgelist[cur];
+var etag;
+var eq = e.getEquivalence ();
+if (eq != 0) {
+var origstate = this.getState ();
+etag = (origstate == 1 ? -1 : 1);
+var activematch = null;
+var longestmatch = e;
+var furthesty = yend;
+do {
+this.classify (e);
+if (activematch == null && e.isActiveFor (ystart, etag)) {
+activematch = e;
+}y = e.getCurve ().getYBot ();
+if (y > furthesty) {
+longestmatch = e;
+furthesty = y;
+}} while (++cur < right && (e = edgelist[cur]).getEquivalence () == eq);
+--cur;
+if (this.getState () == origstate) {
+etag = 0;
+} else {
+e = (activematch != null ? activematch : longestmatch);
+}} else {
+etag = this.classify (e);
+}if (etag != 0) {
+e.record (yend, etag);
+links.add ( new jssun.awt.geom.CurveLink (e.getCurve (), ystart, yend, etag));
+}}
+if (this.getState () != -1) {
+System.out.println ("Still inside at end of active edge list!");
+System.out.println ("num curves = " + (right - left));
+System.out.println ("num links = " + links.size ());
+System.out.println ("y top = " + yrange[0]);
+if (right < numedges) {
+System.out.println ("y top of next curve = " + edgelist[right].getCurve ().getYTop ());
+} else {
+System.out.println ("no more curves");
+}for (cur = left; cur < right; cur++) {
+e = edgelist[cur];
+System.out.println (e);
+var eq = e.getEquivalence ();
+if (eq != 0) {
+System.out.println ("  was equal to " + eq + "...");
+}}
+}if (false) {
+System.out.println ("new links:");
+for (var i = 0; i < links.size (); i++) {
+var link = links.elementAt (i);
+System.out.println ("  " + link.getSubCurve ());
+}
+}jssun.awt.geom.AreaOp.resolveLinks (subcurves, chains, links);
+links.clear ();
+yrange[0] = yend;
+}
+jssun.awt.geom.AreaOp.finalizeSubCurves (subcurves, chains);
+var ret =  new java.util.Vector ();
+var enum_ = subcurves.elements ();
+while (enum_.hasMoreElements ()) {
+var link = enum_.nextElement ();
+ret.add (link.getMoveto ());
+var nextlink = link;
+while ((nextlink = nextlink.getNext ()) != null) {
+if (!link.absorb (nextlink)) {
+ret.add (link.getSubCurve ());
+link = nextlink;
+}}
+ret.add (link.getSubCurve ());
+}
+return ret;
+}, "java.util.Vector");
+c$.finalizeSubCurves = Clazz.defineMethod (c$, "finalizeSubCurves", 
+function (subcurves, chains) {
+var numchains = chains.size ();
+if (numchains == 0) {
+return;
+}if ((numchains & 1) != 0) {
+throw  new InternalError ("Odd number of chains!");
+}var endlist =  new Array (numchains);
+chains.toArray (endlist);
+for (var i = 1; i < numchains; i += 2) {
+var open = endlist[i - 1];
+var close = endlist[i];
+var subcurve = open.linkTo (close);
+if (subcurve != null) {
+subcurves.add (subcurve);
+}}
+chains.clear ();
+}, "java.util.Vector,java.util.Vector");
+c$.resolveLinks = Clazz.defineMethod (c$, "resolveLinks", 
+function (subcurves, chains, links) {
+var numlinks = links.size ();
+var linklist;
+if (numlinks == 0) {
+linklist = jssun.awt.geom.AreaOp.EmptyLinkList;
+} else {
+if ((numlinks & 1) != 0) {
+throw  new InternalError ("Odd number of new curves!");
+}linklist =  new Array (numlinks + 2);
+links.toArray (linklist);
+}var numchains = chains.size ();
+var endlist;
+if (numchains == 0) {
+endlist = jssun.awt.geom.AreaOp.EmptyChainList;
+} else {
+if ((numchains & 1) != 0) {
+throw  new InternalError ("Odd number of chains!");
+}endlist =  new Array (numchains + 2);
+chains.toArray (endlist);
+}var curchain = 0;
+var curlink = 0;
+chains.clear ();
+var chain = endlist[0];
+var nextchain = endlist[1];
+var link = linklist[0];
+var nextlink = linklist[1];
+while (chain != null || link != null) {
+var connectchains = (link == null);
+var connectlinks = (chain == null);
+if (!connectchains && !connectlinks) {
+connectchains = ((curchain & 1) == 0 && chain.getX () == nextchain.getX ());
+connectlinks = ((curlink & 1) == 0 && link.getX () == nextlink.getX ());
+if (!connectchains && !connectlinks) {
+var cx = chain.getX ();
+var lx = link.getX ();
+connectchains = (nextchain != null && cx < lx && jssun.awt.geom.AreaOp.obstructs (nextchain.getX (), lx, curchain));
+connectlinks = (nextlink != null && lx < cx && jssun.awt.geom.AreaOp.obstructs (nextlink.getX (), cx, curlink));
+}}if (connectchains) {
+var subcurve = chain.linkTo (nextchain);
+if (subcurve != null) {
+subcurves.add (subcurve);
+}curchain += 2;
+chain = endlist[curchain];
+nextchain = endlist[curchain + 1];
+}if (connectlinks) {
+var openend =  new jssun.awt.geom.ChainEnd (link, null);
+var closeend =  new jssun.awt.geom.ChainEnd (nextlink, openend);
+openend.setOtherEnd (closeend);
+chains.add (openend);
+chains.add (closeend);
+curlink += 2;
+link = linklist[curlink];
+nextlink = linklist[curlink + 1];
+}if (!connectchains && !connectlinks) {
+chain.addLink (link);
+chains.add (chain);
+curchain++;
+chain = nextchain;
+nextchain = endlist[curchain + 1];
+curlink++;
+link = nextlink;
+nextlink = linklist[curlink + 1];
+}}
+if ((chains.size () & 1) != 0) {
+System.out.println ("Odd number of chains!");
+}}, "java.util.Vector,java.util.Vector,java.util.Vector");
+c$.obstructs = Clazz.defineMethod (c$, "obstructs", 
+function (v1, v2, phase) {
+return (((phase & 1) == 0) ? (v1 <= v2) : (v1 < v2));
+}, "~N,~N,~N");
+c$.$AreaOp$1$ = function () {
+Clazz.pu$h(self.c$);
+c$ = Clazz.declareAnonymous (jssun.awt.geom, "AreaOp$1", null, java.util.Comparator);
+Clazz.overrideMethod (c$, "compare", 
+function (o1, o2) {
+var c1 = (o1).getCurve ();
+var c2 = (o2).getCurve ();
+var v1;
+var v2;
+if ((v1 = c1.getYTop ()) == (v2 = c2.getYTop ())) {
+if ((v1 = c1.getXTop ()) == (v2 = c2.getXTop ())) {
+return 0;
+}}if (v1 < v2) {
+return -1;
+}return 1;
+}, "~O,~O");
+c$ = Clazz.p0p ();
+};
+Clazz.pu$h(self.c$);
+c$ = Clazz.decorateAsClass (function () {
+this.inLeft = false;
+this.inRight = false;
+this.inResult = false;
+Clazz.instantialize (this, arguments);
+}, jssun.awt.geom.AreaOp, "CAGOp", jssun.awt.geom.AreaOp);
+Clazz.overrideMethod (c$, "newRow", 
+function () {
+this.inLeft = false;
+this.inRight = false;
+this.inResult = false;
+});
+Clazz.overrideMethod (c$, "classify", 
+function (a) {
+if (a.getCurveTag () == 0) {
+this.inLeft = !this.inLeft;
+} else {
+this.inRight = !this.inRight;
+}var b = this.newClassification (this.inLeft, this.inRight);
+if (this.inResult == b) {
+return 0;
+}this.inResult = b;
+return (b ? 1 : -1);
+}, "jssun.awt.geom.Edge");
+Clazz.overrideMethod (c$, "getState", 
+function () {
+return (this.inResult ? 1 : -1);
+});
+c$ = Clazz.p0p ();
+Clazz.pu$h(self.c$);
+c$ = Clazz.declareType (jssun.awt.geom.AreaOp, "AddOp", jssun.awt.geom.AreaOp.CAGOp);
+Clazz.overrideMethod (c$, "newClassification", 
+function (a, b) {
+return (a || b);
+}, "~B,~B");
+c$ = Clazz.p0p ();
+Clazz.pu$h(self.c$);
+c$ = Clazz.declareType (jssun.awt.geom.AreaOp, "SubOp", jssun.awt.geom.AreaOp.CAGOp);
+Clazz.overrideMethod (c$, "newClassification", 
+function (a, b) {
+return (a && !b);
+}, "~B,~B");
+c$ = Clazz.p0p ();
+Clazz.pu$h(self.c$);
+c$ = Clazz.declareType (jssun.awt.geom.AreaOp, "IntOp", jssun.awt.geom.AreaOp.CAGOp);
+Clazz.overrideMethod (c$, "newClassification", 
+function (a, b) {
+return (a && b);
+}, "~B,~B");
+c$ = Clazz.p0p ();
+Clazz.pu$h(self.c$);
+c$ = Clazz.declareType (jssun.awt.geom.AreaOp, "XorOp", jssun.awt.geom.AreaOp.CAGOp);
+Clazz.overrideMethod (c$, "newClassification", 
+function (a, b) {
+return (a != b);
+}, "~B,~B");
+c$ = Clazz.p0p ();
+Clazz.pu$h(self.c$);
+c$ = Clazz.decorateAsClass (function () {
+this.count = 0;
+Clazz.instantialize (this, arguments);
+}, jssun.awt.geom.AreaOp, "NZWindOp", jssun.awt.geom.AreaOp);
+Clazz.overrideMethod (c$, "newRow", 
+function () {
+this.count = 0;
+});
+Clazz.overrideMethod (c$, "classify", 
+function (a) {
+var b = this.count;
+var c = (b == 0 ? 1 : 0);
+b += a.getCurve ().getDirection ();
+this.count = b;
+return (b == 0 ? -1 : c);
+}, "jssun.awt.geom.Edge");
+Clazz.overrideMethod (c$, "getState", 
+function () {
+return ((this.count == 0) ? -1 : 1);
+});
+c$ = Clazz.p0p ();
+Clazz.pu$h(self.c$);
+c$ = Clazz.decorateAsClass (function () {
+this.inside = false;
+Clazz.instantialize (this, arguments);
+}, jssun.awt.geom.AreaOp, "EOWindOp", jssun.awt.geom.AreaOp);
+Clazz.overrideMethod (c$, "newRow", 
+function () {
+this.inside = false;
+});
+Clazz.overrideMethod (c$, "classify", 
+function (a) {
+var b = !this.inside;
+this.inside = b;
+return (b ? 1 : -1);
+}, "jssun.awt.geom.Edge");
+Clazz.overrideMethod (c$, "getState", 
+function () {
+return (this.inside ? 1 : -1);
+});
+c$ = Clazz.p0p ();
+Clazz.defineStatics (c$,
+"CTAG_LEFT", 0,
+"CTAG_RIGHT", 1,
+"ETAG_IGNORE", 0,
+"ETAG_ENTER", 1,
+"ETAG_EXIT", -1,
+"RSTAG_INSIDE", 1,
+"RSTAG_OUTSIDE", -1);
+c$.YXTopComparator = c$.prototype.YXTopComparator = ((Clazz.isClassDefined ("jssun.awt.geom.AreaOp$1") ? 0 : jssun.awt.geom.AreaOp.$AreaOp$1$ ()), Clazz.innerTypeInstance (jssun.awt.geom.AreaOp$1, this, null));
+c$.EmptyLinkList = c$.prototype.EmptyLinkList =  new Array (2);
+c$.EmptyChainList = c$.prototype.EmptyChainList =  new Array (2);
+});