@Override public void operateDTDurationDTDuration(LongPointable longp1, LongPointable longp2, DataOutput dOut) throws SystemException, IOException { double value = longp1.longValue(); value /= longp2.longValue(); abvsInner.reset(); doublep.set(abvsInner.getByteArray(), abvsInner.getStartOffset(), DoublePointable.TYPE_TRAITS.getFixedLength()); doublep.setDouble(value); CastToDecimalOperation castToDecmial = new CastToDecimalOperation(); castToDecmial.convertDouble(doublep, dOut); }
/** * 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); } } };
@Override public void operateYMDurationYMDuration(IntegerPointable intp, IntegerPointable intp2, DataOutput dOut) throws SystemException, IOException { if (intp2.getInteger() == 0) { throw new SystemException(ErrorCode.FOAR0001); } double value = intp.intValue(); value /= intp2.intValue(); abvsInner.reset(); doublep.set(abvsInner.getByteArray(), abvsInner.getStartOffset(), DoublePointable.TYPE_TRAITS.getFixedLength()); doublep.setDouble(value); CastToDecimalOperation castToDecmial = new CastToDecimalOperation(); castToDecmial.convertDouble(doublep, dOut); }
abvsArgument1.reset(); castToDouble.convertUntypedAtomic(tp1.utf8sp, dOutArgument1); doublep1.set(abvsArgument1.getByteArray(), abvsArgument1.getStartOffset() + 1, DoublePointable.TYPE_TRAITS.getFixedLength()); break; abvsArgument2.reset(); castToDouble.convertUntypedAtomic(tp2.utf8sp, dOutArgument2); doublep2.set(abvsArgument2.getByteArray(), abvsArgument2.getStartOffset() + 1, DoublePointable.TYPE_TRAITS.getFixedLength()); break;
@Override public void operateDecimalDecimal(XSDecimalPointable decp1, XSDecimalPointable decp2, DataOutput dOut) throws SystemException, IOException { // Prepare double value1 = decp1.doubleValue(); double value2 = decp2.doubleValue(); if (value2 == 0) { throw new SystemException(ErrorCode.FOAR0001); } // Divide value1 /= value2; // Save abvsInner.reset(); doublep.set(abvsInner.getByteArray(), abvsInner.getStartOffset(), DoublePointable.TYPE_TRAITS.getFixedLength()); doublep.setDouble(value1); CastToDecimalOperation castToDecmial = new CastToDecimalOperation(); castToDecmial.convertDouble(doublep, dOut); }
abvsArgument1.reset(); castToDouble.convertUntypedAtomic(tp1.utf8sp, dOutArgument1); doublep1.set(abvsArgument1.getByteArray(), abvsArgument1.getStartOffset() + 1, DoublePointable.TYPE_TRAITS.getFixedLength()); break; abvsArgument2.reset(); castToDouble.convertUntypedAtomic(tp2.utf8sp, dOutArgument2); doublep2.set(abvsArgument2.getByteArray(), abvsArgument2.getStartOffset() + 1, DoublePointable.TYPE_TRAITS.getFixedLength()); break;
@Override public void operateIntegerInteger(LongPointable longp, LongPointable longp2, DataOutput dOut) throws SystemException, IOException { if (longp2.getLong() == 0) { throw new SystemException(ErrorCode.FOAR0001); } // This is an exception for integer integer operations. The divide operation returns a decimal. double value = longp.doubleValue(); value /= longp2.doubleValue(); abvsInner.reset(); doublep.set(abvsInner.getByteArray(), abvsInner.getStartOffset(), DoublePointable.TYPE_TRAITS.getFixedLength()); doublep.setDouble(value); CastToDecimalOperation castToDecmial = new CastToDecimalOperation(); castToDecmial.convertDouble(doublep, dOut); }
doublep.set(new byte[DoublePointable.TYPE_TRAITS.getFixedLength()], 0, DoublePointable.TYPE_TRAITS.getFixedLength()); doublep.setDouble(((Number) value).doubleValue());