/* * Copyright (c) 1998, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package sun.awt.geom; final class Edge { static final int INIT_PARTS = 4; static final int GROW_PARTS = 10; Curve curve; int ctag; int etag; double activey; int equivalence; public Edge(Curve c, int ctag) { this(c, ctag, AreaOp.ETAG_IGNORE); } public Edge(Curve c, int ctag, int etag) { this.curve = c; this.ctag = ctag; this.etag = etag; } public Curve getCurve() { return curve; } public int getCurveTag() { return ctag; } public int getEdgeTag() { return etag; } public void setEdgeTag(int etag) { this.etag = etag; } public int getEquivalence() { return equivalence; } public void setEquivalence(int eq) { equivalence = eq; } private Edge lastEdge; private int lastResult; private double lastLimit; public int compareTo(Edge other, double yrange[]) { if (other == lastEdge && yrange[0] < lastLimit) { if (yrange[1] > lastLimit) { yrange[1] = lastLimit; } return lastResult; } if (this == other.lastEdge && yrange[0] < other.lastLimit) { if (yrange[1] > other.lastLimit) { yrange[1] = other.lastLimit; } return 0-other.lastResult; } //long start = System.currentTimeMillis(); int ret = curve.compareTo(other.curve, yrange); //long end = System.currentTimeMillis(); /* System.out.println("compare: "+ ((System.identityHashCode(this) < System.identityHashCode(other)) ? this+" to "+other : other+" to "+this)+ " == "+ret+" at "+yrange[1]+ " in "+(end-start)+"ms"); */ lastEdge = other; lastLimit = yrange[1]; lastResult = ret; return ret; } public void record(double yend, int etag) { this.activey = yend; this.etag = etag; } public boolean isActiveFor(double y, int etag) { return (this.etag == etag && this.activey >= y); } public String toString() { return ("Edge["+curve+ ", "+ (ctag == AreaOp.CTAG_LEFT ? "L" : "R")+ ", "+ (etag == AreaOp.ETAG_ENTER ? "I" : (etag == AreaOp.ETAG_EXIT ? "O" : "N"))+ "]"); } }