kiwi-postgis  Version 0.1.0.0
Coordinate.DimensionalComparator Class Reference

Compares two Coordinates, allowing for either a 2-dimensional or 3-dimensional comparison, and handling NaN values correctly. More...

Inheritance diagram for Coordinate.DimensionalComparator:
Collaboration diagram for Coordinate.DimensionalComparator:

Public Member Functions

 DimensionalComparator ()
 Creates a comparator for 2 dimensional coordinates. More...
 
 DimensionalComparator (int dimensionsToTest)
 Creates a comparator for 2 or 3 dimensional coordinates, depending on the value provided. More...
 
int compare (Coordinate c1, Coordinate c2)
 Compares two Coordinates along to the number of dimensions specified. More...
 

Static Public Member Functions

static int compare (double a, double b)
 Compare two doubles, allowing for NaN values. More...
 

Private Attributes

int dimensionsToTest = 2
 

Detailed Description

Compares two Coordinates, allowing for either a 2-dimensional or 3-dimensional comparison, and handling NaN values correctly.

Constructor & Destructor Documentation

◆ DimensionalComparator() [1/2]

Creates a comparator for 2 dimensional coordinates.

509  {
510  this(2);
511  }

◆ DimensionalComparator() [2/2]

DimensionalComparator ( int  dimensionsToTest)

Creates a comparator for 2 or 3 dimensional coordinates, depending on the value provided.

Parameters
dimensionsToTestthe number of dimensions to test

References Coordinate.DimensionalComparator.dimensionsToTest.

520  {
521  if (dimensionsToTest != 2 && dimensionsToTest != 3)
522  throw new IllegalArgumentException("only 2 or 3 dimensions may be specified");
524  }
int dimensionsToTest
Definition: Coordinate.java:503

Member Function Documentation

◆ compare() [1/2]

static int compare ( double  a,
double  b 
)
static

Compare two doubles, allowing for NaN values.

NaN is treated as being less than any valid number.

Parameters
aa double
ba double
Returns
-1, 0, or 1 depending on whether a is less than, equal to or greater than b

Referenced by Coordinate.DimensionalComparator.compare().

490  {
491  if (a < b) return -1;
492  if (a > b) return 1;
493 
494  if (Double.isNaN(a)) {
495  if (Double.isNaN(b)) return 0;
496  return -1;
497  }
498 
499  if (Double.isNaN(b)) return 1;
500  return 0;
501  }

◆ compare() [2/2]

int compare ( Coordinate  c1,
Coordinate  c2 
)

Compares two Coordinates along to the number of dimensions specified.

Parameters
o1a Coordinate
o2a {link Coordinate}
Returns
-1, 0, or 1 depending on whether o1 is less than, equal to, or greater than 02

References Coordinate.DimensionalComparator.compare(), Coordinate.getZ(), Coordinate.x, and Coordinate.y.

537  {
538  int compX = compare(c1.x, c2.x);
539  if (compX != 0) return compX;
540 
541  int compY = compare(c1.y, c2.y);
542  if (compY != 0) return compY;
543 
544  if (dimensionsToTest <= 2) return 0;
545 
546  int compZ = compare(c1.getZ(), c2.getZ());
547  return compZ;
548  }
static int compare(double a, double b)
Compare two doubles, allowing for NaN values.
Definition: Coordinate.java:489
int dimensionsToTest
Definition: Coordinate.java:503

Member Data Documentation

◆ dimensionsToTest

int dimensionsToTest = 2
private