@Override public void operateDTDurationDouble(LongPointable longp, DoublePointable doublep, DataOutput dOut) throws SystemException, IOException { long value = longp.longValue(); value += doublep.longValue(); dOut.write(ValueTag.XS_DAY_TIME_DURATION_TAG); dOut.writeLong(value); }
@Override public void operateDTDurationDouble(LongPointable longp, DoublePointable doublep, DataOutput dOut) throws SystemException, IOException { long value = longp.longValue(); value *= doublep.longValue(); dOut.write(ValueTag.XS_DAY_TIME_DURATION_TAG); dOut.writeLong(value); }
@Override public void operateDTDurationDouble(LongPointable longp, DoublePointable doublep, DataOutput dOut) throws SystemException, IOException { long value = longp.longValue(); value -= doublep.longValue(); dOut.write(ValueTag.XS_DAY_TIME_DURATION_TAG); dOut.writeLong(value); }
@Override public void convertDouble(DoublePointable doublep, DataOutput dOut) throws SystemException, IOException { double doubleValue = doublep.getDouble(); if (Double.isInfinite(doubleValue) || Double.isNaN(doubleValue)) { throw new SystemException(ErrorCode.FOCA0002); } if (doubleValue > Long.MAX_VALUE || doubleValue < Long.MIN_VALUE) { throw new SystemException(ErrorCode.FOCA0003); } if ((doublep.longValue() < 0 && !negativeAllowed) || (doublep.longValue() > 0 && negativeRequired)) { throw new SystemException(ErrorCode.FORG0001); } dOut.write(returnTag); dOut.writeLong(doublep.longValue()); }
/** * XQuery Specification calls for double value. Integer and Decimal are allowed to cut down on casting. * * @param tvp * @return long * @throws SystemException * @throws IOException */ public long getLongFromArgument(TaggedValuePointable tvp) throws SystemException, IOException { if (tvp.getTag() == ValueTag.XS_DOUBLE_TAG) { tvp.getValue(doublep); abvsRound.reset(); round.operateDouble(doublep, abvsRound.getDataOutput()); doublep.set(abvsRound.getByteArray(), abvsRound.getStartOffset() + 1, DoublePointable.TYPE_TRAITS.getFixedLength()); return doublep.longValue(); } else if (tvp.getTag() == ValueTag.XS_INTEGER_TAG) { tvp.getValue(longp); return longp.longValue(); } else if (tvp.getTag() == ValueTag.XS_DECIMAL_TAG) { tvp.getValue(decp); return decp.longValue(); } else { throw new SystemException(ErrorCode.FORG0006); } } };