## com.vividsolutions.jts.geom.impl
Class PackedCoordinateSequence

    java.lang.Object
      com.vividsolutions.jts.geom.impl.PackedCoordinateSequence

All Implemented Interfaces:
  java.lang.Cloneable, CoordinateSequence

Direct Known Subclasses:
  PackedCoordinateSequence.Double, PackedCoordinateSequence.Float

public abstract class PackedCoordinateSequence
extends java.lang.Object
implements CoordinateSequence

A `CoordinateSequence` implementation based on a packed arrays. In this implementation, `Coordinate`s returned by #toArray and #get are copies of the internal values. To change the actual values, use the provided setters.

For efficiency, created Coordinate arrays are cached using a soft reference. The cache is cleared each time the coordinate sequence contents are modified through a setter method.

Version:
  1.7

Nested Class Summary
`static class` `PackedCoordinateSequence.Double` Packed coordinate sequence implementation based on doubles
`static class` `PackedCoordinateSequence.Float` Packed coordinate sequence implementation based on floats

Field Summary
`protected java.lang.ref.SoftReference` `coordRef` A soft reference to the Coordinate[] representation of this sequence.
`protected int` `dimension` The dimensions of the coordinates hold in the packed array

Fields inherited from interface com.vividsolutions.jts.geom.CoordinateSequence
`M, X, Y, Z`

Constructor Summary
`PackedCoordinateSequence()`

Method Summary
`abstract java.lang.Object` `clone()` Returns a deep copy of this collection.
`Coordinate` `getCoordinate(int i)` Returns (possibly a copy of) the i'th coordinate in this sequence.
`void` `getCoordinate(int i, Coordinate coord)` Copies the i'th coordinate in the sequence to the supplied `Coordinate`.
`Coordinate` `getCoordinateCopy(int i)` Returns a copy of the i'th coordinate in this sequence.
`protected abstract Coordinate` `getCoordinateInternal(int index)` Returns a Coordinate representation of the specified coordinate, by always building a new Coordinate object
`int` `getDimension()` Returns the dimension (number of ordinates in each coordinate) for this sequence.
`abstract double` `getOrdinate(int index, int ordinateIndex)` Returns the ordinate of a coordinate in this sequence.
`double` `getX(int index)` Returns ordinate X (0) of the specified coordinate.
`double` `getY(int index)` Returns ordinate Y (1) of the specified coordinate.
`abstract void` `setOrdinate(int index, int ordinate, double value)` Sets the ordinate of a coordinate in this sequence.
`void` `setX(int index, double value)` Sets the first ordinate of a coordinate in this sequence.
`void` `setY(int index, double value)` Sets the second ordinate of a coordinate in this sequence.
`Coordinate[]` `toCoordinateArray()` Returns (possibly copies of) the Coordinates in this collection.

Methods inherited from class java.lang.Object
`equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Methods inherited from interface com.vividsolutions.jts.geom.CoordinateSequence
`expandEnvelope, size`

Field Detail

### dimension

    protected int dimension

  The dimensions of the coordinates hold in the packed array

### coordRef

    protected java.lang.ref.SoftReference coordRef

  A soft reference to the Coordinate[] representation of this sequence. Makes repeated coordinate array accesses more efficient.

Constructor Detail

### PackedCoordinateSequence

    public PackedCoordinateSequence()

Method Detail

### getDimension

    public int getDimension()

  Description copied from interface: `CoordinateSequence`
  Returns the dimension (number of ordinates in each coordinate) for this sequence.

  Specified by:
    `getDimension` in interface `CoordinateSequence`
  Returns:
    the dimension of the sequence.
  See Also:
    `CoordinateSequence.getDimension()`

### getCoordinate

    public Coordinate getCoordinate(int i)

  Description copied from interface: `CoordinateSequence`
  Returns (possibly a copy of) the i'th coordinate in this sequence. Whether or not the Coordinate returned is the actual underlying Coordinate or merely a copy depends on the implementation.

  Note that in the future the semantics of this method may change to guarantee that the Coordinate returned is always a copy. Callers should not to assume that they can modify a CoordinateSequence by modifying the object returned by this method.

  Specified by:
    `getCoordinate` in interface `CoordinateSequence`
  Parameters:
    `i` - the index of the coordinate to retrieve
  Returns:
    the i'th coordinate in the sequence
  See Also:
    `CoordinateSequence.getCoordinate(int)`

### getCoordinateCopy

    public Coordinate getCoordinateCopy(int i)

  Description copied from interface: `CoordinateSequence`
  Returns a copy of the i'th coordinate in this sequence. This method optimizes the situation where the caller is going to make a copy anyway - if the implementation has already created a new Coordinate object, no further copy is needed.

  Specified by:
    `getCoordinateCopy` in interface `CoordinateSequence`
  Parameters:
    `i` - the index of the coordinate to retrieve
  Returns:
    a copy of the i'th coordinate in the sequence
  See Also:
    `CoordinateSequence.getCoordinate(int)`

### getCoordinate

    public void getCoordinate(int i,
                              Coordinate coord)

  Description copied from interface: `CoordinateSequence`
  Copies the i'th coordinate in the sequence to the supplied `Coordinate`. Only the first two dimensions are copied.

  Specified by:
    `getCoordinate` in interface `CoordinateSequence`
  Parameters:
    `i` - the index of the coordinate to copy
    `coord` - a `Coordinate` to receive the value
  See Also:
    `CoordinateSequence.getCoordinate(int)`

### toCoordinateArray

    public Coordinate[] toCoordinateArray()

  Description copied from interface: `CoordinateSequence`
  Returns (possibly copies of) the Coordinates in this collection. Whether or not the Coordinates returned are the actual underlying Coordinates or merely copies depends on the implementation. Note that if this implementation does not store its data as an array of Coordinates, this method will incur a performance penalty because the array needs to be built from scratch.

  Specified by:
    `toCoordinateArray` in interface `CoordinateSequence`
  Returns:
    a array of coordinates containing the point values in this sequence
  See Also:
    `CoordinateSequence.toCoordinateArray()`

### getX

    public double getX(int index)

  Description copied from interface: `CoordinateSequence`
  Returns ordinate X (0) of the specified coordinate.

  Specified by:
    `getX` in interface `CoordinateSequence`
  Parameters:
    `index` -
  Returns:
    the value of the X ordinate in the index'th coordinate
  See Also:
    `CoordinateSequence.getX(int)`

### getY

    public double getY(int index)

  Description copied from interface: `CoordinateSequence`
  Returns ordinate Y (1) of the specified coordinate.

  Specified by:
    `getY` in interface `CoordinateSequence`
  Parameters:
    `index` -
  Returns:
    the value of the Y ordinate in the index'th coordinate
  See Also:
    `CoordinateSequence.getY(int)`

### getOrdinate

    public abstract double getOrdinate(int index,
                                       int ordinateIndex)

  Description copied from interface: `CoordinateSequence`
  Returns the ordinate of a coordinate in this sequence. Ordinate indices 0 and 1 are assumed to be X and Y. Ordinates indices greater than 1 have user-defined semantics (for instance, they may contain other dimensions or measure values).

  Specified by:
    `getOrdinate` in interface `CoordinateSequence`
  Parameters:
    `index` - the coordinate index in the sequence
    `ordinateIndex` - the ordinate index in the coordinate (in range [0, dimension-1])
  See Also:
    `CoordinateSequence.getOrdinate(int, int)`

### setX

    public void setX(int index,
                     double value)

  Sets the first ordinate of a coordinate in this sequence.

  Parameters:
    `index` - the coordinate index
    `value` - the new ordinate value

### setY

    public void setY(int index,
                     double value)

  Sets the second ordinate of a coordinate in this sequence.

  Parameters:
    `index` - the coordinate index
    `value` - the new ordinate value

### getCoordinateInternal

    protected abstract Coordinate getCoordinateInternal(int index)

  Returns a Coordinate representation of the specified coordinate, by always building a new Coordinate object

  Parameters:
    `index` -
  Returns:

### clone

    public abstract java.lang.Object clone()

  Description copied from interface: `CoordinateSequence`
  Returns a deep copy of this collection. Called by Geometry#clone.

  Specified by:
    `clone` in interface `CoordinateSequence`
  See Also:
    `Object.clone()`

### setOrdinate

    public abstract void setOrdinate(int index,
                                     int ordinate,
                                     double value)

  Sets the ordinate of a coordinate in this sequence.
  Warning: for performance reasons the ordinate index is not checked - if it is over dimensions you may not get an exception but a meaningless value.

  Specified by:
    `setOrdinate` in interface `CoordinateSequence`
  Parameters:
    `index` - the coordinate index
    `ordinate` - the ordinate index in the coordinate, 0 based, smaller than the number of dimensions
    `value` - the new ordinate value