idiv method
Implementation
@override
XPathInteger idiv(XPathNumeric other) => switch (other) {
final XPathInteger i => idiv(i.toDecimal()),
final XPathDecimal d =>
d.unscaledValue == BigInt.zero
? throw XPathEvaluationException(
XPathErrorCode.FOAR0001,
'Division by zero in idiv',
)
: () {
final maxScale = math.max(scale, d.scale);
final u1 = unscaledValue * _ten.pow(maxScale - scale);
final u2 = d.unscaledValue * _ten.pow(maxScale - d.scale);
return XPathInteger(u1 ~/ u2);
}(),
final XPathDouble d =>
d.value == 0
? throw XPathEvaluationException(
XPathErrorCode.FOAR0001,
'Division by zero in idiv',
)
: d.value.isNaN
? throw XPathEvaluationException(
XPathErrorCode.FOAR0002,
'NaN in idiv',
)
: d.value.isInfinite
? XPathInteger(BigInt.zero)
: XPathDouble(toDouble()).idiv(d),
};