HBASE-3902 Add Bytes.toBigDecimal and Bytes.toBytes(BigDecimal)
git-svn-id: https://svn.apache.org/repos/asf/hbase/trunk@1125098 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
e90a9858f4
commit
5fc468c60c
|
@ -264,12 +264,14 @@ Release 0.90.4 - Unreleased
|
|||
HBASE-3895 Fix order of parameters after HBASE-1511
|
||||
HBASE-3874 ServerShutdownHandler fails on NPE if a plan has a random
|
||||
region assignment
|
||||
HBASE-3902 Add Bytes.toBigDecimal and Bytes.toBytes(BigDecimal)
|
||||
(Vaibhav Puranik)
|
||||
|
||||
IMPROVEMENT
|
||||
HBASE-3882 hbase-config.sh needs to be updated so it can auto-detects the
|
||||
sun jre provided by RHEL6 (Roman Shaposhnik)
|
||||
|
||||
Release 0.90.3 - Unreleased
|
||||
Release 0.90.3 - May 19th, 2011
|
||||
|
||||
BUG FIXES
|
||||
HBASE-3746 Clean up CompressionTest to not directly reference
|
||||
|
|
|
@ -764,6 +764,81 @@ public class Bytes {
|
|||
return offset + SIZEOF_SHORT;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a BigDecimal value to a byte array
|
||||
*
|
||||
* @param val
|
||||
* @return the byte array
|
||||
*/
|
||||
public static byte[] toBytes(BigDecimal val) {
|
||||
byte[] valueBytes = val.unscaledValue().toByteArray();
|
||||
byte[] result = new byte[valueBytes.length + SIZEOF_INT];
|
||||
int offset = putInt(result, 0, val.scale());
|
||||
putBytes(result, offset, valueBytes, 0, valueBytes.length);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Converts a byte array to a BigDecimal
|
||||
*
|
||||
* @param bytes
|
||||
* @return the char value
|
||||
*/
|
||||
public static BigDecimal toBigDecimal(byte[] bytes) {
|
||||
return toBigDecimal(bytes, 0, bytes.length);
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts a byte array to a BigDecimal value
|
||||
*
|
||||
* @param bytes
|
||||
* @param offset
|
||||
* @return the char value
|
||||
*/
|
||||
public static BigDecimal toBigDecimal(byte[] bytes, int offset) {
|
||||
return toBigDecimal(bytes, offset, bytes.length);
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts a byte array to a BigDecimal value
|
||||
*
|
||||
* @param bytes
|
||||
* @param offset
|
||||
* @param length
|
||||
* @return the char value
|
||||
*/
|
||||
public static BigDecimal toBigDecimal(byte[] bytes, int offset, final int length) {
|
||||
if (bytes == null || length < SIZEOF_INT + 1 ||
|
||||
(offset + length > bytes.length)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
int scale = toInt(bytes, 0);
|
||||
byte[] tcBytes = new byte[length - SIZEOF_INT];
|
||||
System.arraycopy(bytes, SIZEOF_INT, tcBytes, 0, length - SIZEOF_INT);
|
||||
return new BigDecimal(new BigInteger(tcBytes), scale);
|
||||
}
|
||||
|
||||
/**
|
||||
* Put a BigDecimal value out to the specified byte array position.
|
||||
*
|
||||
* @param bytes the byte array
|
||||
* @param offset position in the array
|
||||
* @param val BigDecimal to write out
|
||||
* @return incremented offset
|
||||
*/
|
||||
public static int putBigDecimal(byte[] bytes, int offset, BigDecimal val) {
|
||||
if (bytes == null) {
|
||||
return offset;
|
||||
}
|
||||
|
||||
byte[] valueBytes = val.unscaledValue().toByteArray();
|
||||
byte[] result = new byte[valueBytes.length + SIZEOF_INT];
|
||||
offset = putInt(result, offset, val.scale());
|
||||
return putBytes(result, offset, valueBytes, 0, valueBytes.length);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param vint Integer to make a vint of.
|
||||
* @return Vint as bytes array.
|
||||
|
|
Loading…
Reference in New Issue