// Path: src/gwt/java/pythagoras/util/Platform.java
// public class Platform
// {
//     /**
//      * Returns a hash code for the supplied float value.
//      */
//     public static int hashCode (float f1) {
//         return (int)f1; // alas nothing better can be done in JavaScript
//     }
// 
//     /**
//      * Returns a hash code for the supplied double value.
//      */
//     public static int hashCode (double d1) {
//         return (int)d1; // alas nothing better can be done in JavaScript
//     }
// 
//     /**
//      * Clones the supplied array of bytes.
//      */
//     public static native byte[] clone (byte[] values) /*-{
//         return values.slice(0);
//     }-*/;
// 
//     /**
//      * Clones the supplied array of ints.
//      */
//     public static native int[] clone (int[] values) /*-{
//         return values.slice(0);
//     }-*/;
// 
//     /**
//      * Clones the supplied array of floats.
//      */
//     public static native float[] clone (float[] values) /*-{
//         return values.slice(0);
//     }-*/;
// 
//     /**
//      * Clones the supplied array of doubles.
//      */
//     public static native double[] clone (double[] values) /*-{
//         return values.slice(0);
//     }-*/;
// }


import pythagoras.util.Platform;
import java.util.NoSuchElementException;
                coefs = new float[] { coords[index - 2], coords[index - 1], coords[index],
                                      coords[index + 1], coords[index + 2], coords[index + 3],
                                      coords[index + 4], coords[index + 5] };
                isLeft = CrossingHelper.compare(
                    coords[index - 2], coords[index - 1], point.x(), point.y()) > 0;
                GeometryUtil.subCubic(coefs, point.param(isCurrentArea), !isLeft);

                if (isLeft) {
                    System.arraycopy(coefs, 2, temp, coordsCount, 6);
                    coordsCount += 6;
                } else {
                    System.arraycopy(coefs, 2, temp, coordsCount, 4);
                    coordsCount += 4;
                }
                break;
            }
        }

        if (operation == 2 && !isCurrentArea && coordsCount > 2) {
            reverseCopy(temp);
            System.arraycopy(temp, 0, resultCoords, resultCoordPos, coordsCount);
        } else {
            System.arraycopy(temp, 0, resultCoords, resultCoordPos, coordsCount);
        }

        return (resultCoordPos + coordsCount);
    }

    private void copy (Area src, Area dst) {
        dst._coordsSize = src._coordsSize;
// Path: src/gwt/java/pythagoras/util/Platform.java
// public class Platform
// {
//     /**
//      * Returns a hash code for the supplied float value.
//      */
//     public static int hashCode (float f1) {
//         return (int)f1; // alas nothing better can be done in JavaScript
//     }
// 
//     /**
//      * Returns a hash code for the supplied double value.
//      */
//     public static int hashCode (double d1) {
//         return (int)d1; // alas nothing better can be done in JavaScript
//     }
// 
//     /**
//      * Clones the supplied array of bytes.
//      */
//     public static native byte[] clone (byte[] values) /*-{
//         return values.slice(0);
//     }-*/;
// 
//     /**
//      * Clones the supplied array of ints.
//      */
//     public static native int[] clone (int[] values) /*-{
//         return values.slice(0);
//     }-*/;
// 
//     /**
//      * Clones the supplied array of floats.
//      */
//     public static native float[] clone (float[] values) /*-{
//         return values.slice(0);
//     }-*/;
// 
//     /**
//      * Clones the supplied array of doubles.
//      */
//     public static native double[] clone (double[] values) /*-{
//         return values.slice(0);
//     }-*/;
// }


// Path: src/main/java/pythagoras/f/Area.java
import pythagoras.util.Platform;
import java.util.NoSuchElementException;

                coefs = new float[] { coords[index - 2], coords[index - 1], coords[index],
                                      coords[index + 1], coords[index + 2], coords[index + 3],
                                      coords[index + 4], coords[index + 5] };
                isLeft = CrossingHelper.compare(
                    coords[index - 2], coords[index - 1], point.x(), point.y()) > 0;
                GeometryUtil.subCubic(coefs, point.param(isCurrentArea), !isLeft);

                if (isLeft) {
                    System.arraycopy(coefs, 2, temp, coordsCount, 6);
                    coordsCount += 6;
                } else {
                    System.arraycopy(coefs, 2, temp, coordsCount, 4);
                    coordsCount += 4;
                }
                break;
            }
        }

        if (operation == 2 && !isCurrentArea && coordsCount > 2) {
            reverseCopy(temp);
            System.arraycopy(temp, 0, resultCoords, resultCoordPos, coordsCount);
        } else {
            System.arraycopy(temp, 0, resultCoords, resultCoordPos, coordsCount);
        }

        return (resultCoordPos + coordsCount);
    }

    private void copy (Area src, Area dst) {
        dst._coordsSize = src._coordsSize;
        dst._coords = Platform.clone(src._coords);