public final class UnscaledDecimal128Arithmetic extends Object
[127_bit_unscaled_decimal_value sign_bit] 0-bit...........64-bit............128-bit
127_bit_unscaled_decimal_value is stored in little endian format to provide easy conversion to/from long and int types.
Based on: https://github.com/apache/hive/blob/master/common/src/java/org/apache/hadoop/hive/common/type/UnsignedInt128.java and https://github.com/apache/hive/blob/master/common/src/java/org/apache/hadoop/hive/common/type/Decimal128.java
| Modifier and Type | Field and Description |
|---|---|
static int |
UNSCALED_DECIMAL_128_SLICE_LENGTH |
| Modifier and Type | Method and Description |
|---|---|
static io.airlift.slice.Slice |
add(io.airlift.slice.Slice left,
io.airlift.slice.Slice right) |
static void |
add(io.airlift.slice.Slice left,
io.airlift.slice.Slice right,
io.airlift.slice.Slice result) |
static long |
addWithOverflow(io.airlift.slice.Slice left,
io.airlift.slice.Slice right,
io.airlift.slice.Slice result)
Instead of throwing overflow exception, this function returns:
0 when there was no overflow
+1 when there was overflow
-1 when there was underflow
|
static int |
compare(long leftRawLow,
long leftRawHigh,
long rightRawLow,
long rightRawHigh) |
static int |
compare(io.airlift.slice.Slice left,
io.airlift.slice.Slice right) |
static int |
compareAbsolute(io.airlift.slice.Slice left,
io.airlift.slice.Slice right) |
static int |
compareUnsigned(long leftRawLow,
long leftRawHigh,
long rightRawLow,
long rightRawHigh) |
static io.airlift.slice.Slice |
divideRoundUp(long dividend,
int dividendScaleFactor,
long divisor) |
static io.airlift.slice.Slice |
divideRoundUp(long dividend,
int dividendScaleFactor,
io.airlift.slice.Slice divisor) |
static io.airlift.slice.Slice |
divideRoundUp(io.airlift.slice.Slice dividend,
int dividendScaleFactor,
long divisor) |
static io.airlift.slice.Slice |
divideRoundUp(io.airlift.slice.Slice dividend,
int dividendScaleFactor,
io.airlift.slice.Slice divisor) |
static int |
getInt(io.airlift.slice.Slice decimal,
int index) |
static long |
getLong(io.airlift.slice.Slice decimal,
int index) |
static long |
hash(long rawLow,
long rawHigh) |
static long |
hash(io.airlift.slice.Slice decimal) |
static void |
incrementUnsafe(io.airlift.slice.Slice decimal) |
static boolean |
isNegative(long rawLow,
long rawHigh) |
static boolean |
isNegative(io.airlift.slice.Slice decimal) |
static boolean |
isStrictlyNegative(long rawLow,
long rawHigh) |
static boolean |
isStrictlyNegative(io.airlift.slice.Slice decimal) |
static boolean |
isZero(io.airlift.slice.Slice decimal) |
static io.airlift.slice.Slice |
multiply(io.airlift.slice.Slice decimal,
int multiplier) |
static io.airlift.slice.Slice |
multiply(io.airlift.slice.Slice left,
io.airlift.slice.Slice right) |
static void |
multiply(io.airlift.slice.Slice left,
io.airlift.slice.Slice right,
io.airlift.slice.Slice result) |
static void |
multiply256(io.airlift.slice.Slice left,
io.airlift.slice.Slice right,
io.airlift.slice.Slice result) |
static void |
negate(io.airlift.slice.Slice decimal) |
static boolean |
overflows(io.airlift.slice.Slice value,
int precision) |
static io.airlift.slice.Slice |
pack(BigInteger unscaledValue,
io.airlift.slice.Slice result) |
static io.airlift.slice.Slice |
pack(long low,
long high,
boolean negative) |
static void |
pack(long low,
long high,
boolean negative,
io.airlift.slice.Slice result) |
static io.airlift.slice.Slice |
remainder(long dividend,
int dividendScaleFactor,
long divisor,
int divisorScaleFactor) |
static io.airlift.slice.Slice |
remainder(long dividend,
int dividendScaleFactor,
io.airlift.slice.Slice divisor,
int divisorScaleFactor) |
static io.airlift.slice.Slice |
remainder(io.airlift.slice.Slice dividend,
int dividendScaleFactor,
long divisor,
int divisorScaleFactor) |
static io.airlift.slice.Slice |
remainder(io.airlift.slice.Slice dividend,
int dividendScaleFactor,
io.airlift.slice.Slice divisor,
int divisorScaleFactor) |
static io.airlift.slice.Slice |
rescale(io.airlift.slice.Slice decimal,
int rescaleFactor) |
static void |
rescale(io.airlift.slice.Slice decimal,
int rescaleFactor,
io.airlift.slice.Slice result) |
static io.airlift.slice.Slice |
rescaleTruncate(io.airlift.slice.Slice decimal,
int rescaleFactor) |
static void |
rescaleTruncate(io.airlift.slice.Slice decimal,
int rescaleFactor,
io.airlift.slice.Slice result) |
static void |
shiftRightArray8(int[] values,
int rightShifts,
io.airlift.slice.Slice result)
shift right array of 8 ints (rounding up) and ensure that result fits in unscaledDecimal
|
static io.airlift.slice.Slice |
subtract(io.airlift.slice.Slice left,
io.airlift.slice.Slice right) |
static void |
subtract(io.airlift.slice.Slice left,
io.airlift.slice.Slice right,
io.airlift.slice.Slice result) |
static void |
throwIfOverflows(io.airlift.slice.Slice decimal) |
static void |
throwIfOverflows(io.airlift.slice.Slice value,
int precision) |
static void |
throwOverflowException() |
static String |
toUnscaledString(io.airlift.slice.Slice decimal) |
static io.airlift.slice.Slice |
unscaledDecimal() |
static io.airlift.slice.Slice |
unscaledDecimal(BigInteger unscaledValue) |
static io.airlift.slice.Slice |
unscaledDecimal(long unscaledValue) |
static io.airlift.slice.Slice |
unscaledDecimal(io.airlift.slice.Slice decimal) |
static io.airlift.slice.Slice |
unscaledDecimal(String unscaledValue) |
static BigInteger |
unscaledDecimalToBigInteger(io.airlift.slice.Slice decimal) |
static long |
unscaledDecimalToUnscaledLong(io.airlift.slice.Slice decimal) |
static long |
unscaledDecimalToUnscaledLongUnsafe(io.airlift.slice.Slice decimal) |
public static final int UNSCALED_DECIMAL_128_SLICE_LENGTH
public static io.airlift.slice.Slice unscaledDecimal()
public static io.airlift.slice.Slice unscaledDecimal(io.airlift.slice.Slice decimal)
public static io.airlift.slice.Slice unscaledDecimal(String unscaledValue)
public static io.airlift.slice.Slice unscaledDecimal(BigInteger unscaledValue)
public static io.airlift.slice.Slice pack(BigInteger unscaledValue, io.airlift.slice.Slice result)
public static io.airlift.slice.Slice unscaledDecimal(long unscaledValue)
public static BigInteger unscaledDecimalToBigInteger(io.airlift.slice.Slice decimal)
public static long unscaledDecimalToUnscaledLong(io.airlift.slice.Slice decimal)
public static long unscaledDecimalToUnscaledLongUnsafe(io.airlift.slice.Slice decimal)
public static io.airlift.slice.Slice rescale(io.airlift.slice.Slice decimal,
int rescaleFactor)
public static void rescale(io.airlift.slice.Slice decimal,
int rescaleFactor,
io.airlift.slice.Slice result)
public static io.airlift.slice.Slice rescaleTruncate(io.airlift.slice.Slice decimal,
int rescaleFactor)
public static void rescaleTruncate(io.airlift.slice.Slice decimal,
int rescaleFactor,
io.airlift.slice.Slice result)
public static io.airlift.slice.Slice add(io.airlift.slice.Slice left,
io.airlift.slice.Slice right)
public static void add(io.airlift.slice.Slice left,
io.airlift.slice.Slice right,
io.airlift.slice.Slice result)
public static long addWithOverflow(io.airlift.slice.Slice left,
io.airlift.slice.Slice right,
io.airlift.slice.Slice result)
public static io.airlift.slice.Slice subtract(io.airlift.slice.Slice left,
io.airlift.slice.Slice right)
public static void subtract(io.airlift.slice.Slice left,
io.airlift.slice.Slice right,
io.airlift.slice.Slice result)
public static io.airlift.slice.Slice multiply(io.airlift.slice.Slice left,
io.airlift.slice.Slice right)
public static void multiply(io.airlift.slice.Slice left,
io.airlift.slice.Slice right,
io.airlift.slice.Slice result)
public static void multiply256(io.airlift.slice.Slice left,
io.airlift.slice.Slice right,
io.airlift.slice.Slice result)
public static io.airlift.slice.Slice multiply(io.airlift.slice.Slice decimal,
int multiplier)
public static int compare(io.airlift.slice.Slice left,
io.airlift.slice.Slice right)
public static int compare(long leftRawLow,
long leftRawHigh,
long rightRawLow,
long rightRawHigh)
public static int compareAbsolute(io.airlift.slice.Slice left,
io.airlift.slice.Slice right)
public static int compareUnsigned(long leftRawLow,
long leftRawHigh,
long rightRawLow,
long rightRawHigh)
public static void incrementUnsafe(io.airlift.slice.Slice decimal)
public static void negate(io.airlift.slice.Slice decimal)
public static boolean isStrictlyNegative(io.airlift.slice.Slice decimal)
public static boolean isStrictlyNegative(long rawLow,
long rawHigh)
public static boolean isNegative(io.airlift.slice.Slice decimal)
public static boolean isNegative(long rawLow,
long rawHigh)
public static boolean isZero(io.airlift.slice.Slice decimal)
public static long hash(io.airlift.slice.Slice decimal)
public static long hash(long rawLow,
long rawHigh)
public static String toUnscaledString(io.airlift.slice.Slice decimal)
public static boolean overflows(io.airlift.slice.Slice value,
int precision)
public static void throwIfOverflows(io.airlift.slice.Slice decimal)
public static void throwIfOverflows(io.airlift.slice.Slice value,
int precision)
public static void shiftRightArray8(int[] values,
int rightShifts,
io.airlift.slice.Slice result)
public static io.airlift.slice.Slice divideRoundUp(long dividend,
int dividendScaleFactor,
long divisor)
public static io.airlift.slice.Slice divideRoundUp(long dividend,
int dividendScaleFactor,
io.airlift.slice.Slice divisor)
public static io.airlift.slice.Slice divideRoundUp(io.airlift.slice.Slice dividend,
int dividendScaleFactor,
long divisor)
public static io.airlift.slice.Slice divideRoundUp(io.airlift.slice.Slice dividend,
int dividendScaleFactor,
io.airlift.slice.Slice divisor)
public static io.airlift.slice.Slice remainder(long dividend,
int dividendScaleFactor,
long divisor,
int divisorScaleFactor)
public static io.airlift.slice.Slice remainder(long dividend,
int dividendScaleFactor,
io.airlift.slice.Slice divisor,
int divisorScaleFactor)
public static io.airlift.slice.Slice remainder(io.airlift.slice.Slice dividend,
int dividendScaleFactor,
long divisor,
int divisorScaleFactor)
public static io.airlift.slice.Slice remainder(io.airlift.slice.Slice dividend,
int dividendScaleFactor,
io.airlift.slice.Slice divisor,
int divisorScaleFactor)
public static io.airlift.slice.Slice pack(long low,
long high,
boolean negative)
public static void pack(long low,
long high,
boolean negative,
io.airlift.slice.Slice result)
public static void throwOverflowException()
public static int getInt(io.airlift.slice.Slice decimal,
int index)
public static long getLong(io.airlift.slice.Slice decimal,
int index)
Copyright © 2012–2022. All rights reserved.