compareTo method

  1. @override
int compareTo(
  1. XPathAtomic other
)
override

Compares this object to another object.

Returns a value like a Comparator when comparing this to other. That is, it returns a negative integer if this is ordered before other, a positive integer if this is ordered after other, and zero if this and other are ordered together.

The other argument must be a value that is comparable to this object.

Implementation

@override
int compareTo(XPathAtomic other) {
  if (other is XPathInteger) return compareTo(other.toDecimal());
  if (other is XPathDecimal) {
    final maxScale = math.max(scale, other.scale);
    final u1 = unscaledValue * _ten.pow(maxScale - scale);
    final u2 = other.unscaledValue * _ten.pow(maxScale - other.scale);
    return u1.compareTo(u2);
  }
  if (other is XPathDouble) {
    if (other.value.isNaN) return -1;
    final d = toDouble();
    if (d == other.value) return 0;
    return d.compareTo(other.value);
  }
  return super.compareTo(other);
}