@Override public void write(WriteBuffer buff, Object obj) { if (!(obj instanceof UUID)) { super.write(buff, obj); return; } buff.put((byte) TYPE_UUID); UUID a = (UUID) obj; buff.putLong(a.getMostSignificantBits()); buff.putLong(a.getLeastSignificantBits()); }
@Override public void write(WriteBuffer buff, Object obj) { if (!isBigInteger(obj)) { super.write(buff, obj); return; } BigInteger x = (BigInteger) obj; if (BigInteger.ZERO.equals(x)) { buff.put((byte) TAG_BIG_INTEGER_0); } else if (BigInteger.ONE.equals(x)) { buff.put((byte) TAG_BIG_INTEGER_1); } else { int bits = x.bitLength(); if (bits <= 63) { buff.put((byte) TAG_BIG_INTEGER_SMALL).putVarLong( x.longValue()); } else { byte[] bytes = x.toByteArray(); buff.put((byte) TYPE_BIG_INTEGER).putVarInt(bytes.length) .put(bytes); } } }
@Override public void write(WriteBuffer buff, Object obj) { if (!isBigDecimal(obj)) { super.write(buff, obj); return; } BigDecimal x = (BigDecimal) obj; if (BigDecimal.ZERO.equals(x)) { buff.put((byte) TAG_BIG_DECIMAL_0); } else if (BigDecimal.ONE.equals(x)) { buff.put((byte) TAG_BIG_DECIMAL_1); } else { int scale = x.scale(); BigInteger b = x.unscaledValue(); int bits = b.bitLength(); if (bits < 64) { if (scale == 0) { buff.put((byte) TAG_BIG_DECIMAL_SMALL); } else { buff.put((byte) TAG_BIG_DECIMAL_SMALL_SCALED) .putVarInt(scale); } buff.putVarLong(b.longValue()); } else { byte[] bytes = b.toByteArray(); buff.put((byte) TYPE_BIG_DECIMAL).putVarInt(scale) .putVarInt(bytes.length).put(bytes); } } }
@Override public void write(WriteBuffer buff, Object obj) { if (!isDate(obj)) { super.write(buff, obj); return; } buff.put((byte) TYPE_DATE); Date a = (Date) obj; buff.putLong(a.getTime()); }
@Override public void write(WriteBuffer buff, Object obj) { if (!(obj instanceof Short)) { super.write(buff, obj); return; } buff.put((byte) TYPE_SHORT); buff.putShort(((Short) obj).shortValue()); }
@Override public void write(WriteBuffer buff, Object obj) { if (!isArray(obj)) { super.write(buff, obj); return;
@Override public void write(WriteBuffer buff, Object obj) { if (!(obj instanceof Long)) { super.write(buff, obj); return; } long x = (Long) obj; if (x < 0) { // -Long.MIN_VALUE is smaller than 0 if (-x < 0 || -x > DataUtils.COMPRESSED_VAR_LONG_MAX) { buff.put((byte) TAG_LONG_FIXED); buff.putLong(x); } else { buff.put((byte) TAG_LONG_NEGATIVE); buff.putVarLong(-x); } } else if (x <= 7) { buff.put((byte) (TAG_LONG_0_7 + x)); } else if (x <= DataUtils.COMPRESSED_VAR_LONG_MAX) { buff.put((byte) TYPE_LONG); buff.putVarLong(x); } else { buff.put((byte) TAG_LONG_FIXED); buff.putLong(x); } }
@Override public void write(WriteBuffer buff, Object obj) { if (!(obj instanceof Integer)) { super.write(buff, obj); return; } int x = (Integer) obj; if (x < 0) { // -Integer.MIN_VALUE is smaller than 0 if (-x < 0 || -x > DataUtils.COMPRESSED_VAR_INT_MAX) { buff.put((byte) TAG_INTEGER_FIXED).putInt(x); } else { buff.put((byte) TAG_INTEGER_NEGATIVE).putVarInt(-x); } } else if (x <= 15) { buff.put((byte) (TAG_INTEGER_0_15 + x)); } else if (x <= DataUtils.COMPRESSED_VAR_INT_MAX) { buff.put((byte) TYPE_INT).putVarInt(x); } else { buff.put((byte) TAG_INTEGER_FIXED).putInt(x); } }
@Override public void write(WriteBuffer buff, Object obj) { if (!(obj instanceof Float)) { super.write(buff, obj); return; } float x = (Float) obj; int f = Float.floatToIntBits(x); if (f == ObjectDataType.FLOAT_ZERO_BITS) { buff.put((byte) TAG_FLOAT_0); } else if (f == ObjectDataType.FLOAT_ONE_BITS) { buff.put((byte) TAG_FLOAT_1); } else { int value = Integer.reverse(f); if (value >= 0 && value <= DataUtils.COMPRESSED_VAR_INT_MAX) { buff.put((byte) TYPE_FLOAT).putVarInt(value); } else { buff.put((byte) TAG_FLOAT_FIXED).putFloat(x); } } }
@Override public void write(WriteBuffer buff, Object obj) { if (!(obj instanceof Double)) { super.write(buff, obj); return; } double x = (Double) obj; long d = Double.doubleToLongBits(x); if (d == ObjectDataType.DOUBLE_ZERO_BITS) { buff.put((byte) TAG_DOUBLE_0); } else if (d == ObjectDataType.DOUBLE_ONE_BITS) { buff.put((byte) TAG_DOUBLE_1); } else { long value = Long.reverse(d); if (value >= 0 && value <= DataUtils.COMPRESSED_VAR_LONG_MAX) { buff.put((byte) TYPE_DOUBLE); buff.putVarLong(value); } else { buff.put((byte) TAG_DOUBLE_FIXED); buff.putDouble(x); } } }
@Override public void write(WriteBuffer buff, Object obj) { if (!(obj instanceof String)) { super.write(buff, obj); return; } String s = (String) obj; int len = s.length(); if (len <= 15) { buff.put((byte) (TAG_STRING_0_15 + len)); } else { buff.put((byte) TYPE_STRING).putVarInt(len); } buff.putStringData(s, len); }
@Override public void write(WriteBuffer buff, Object o) { getType(o).write(buff, o); }
@Override public void write(WriteBuffer buff, Object obj) { if (!(obj instanceof Character)) { super.write(buff, obj); return; } buff.put((byte) TYPE_CHAR); buff.putChar(((Character) obj).charValue()); }
@Override public void write(WriteBuffer buff, Object obj) { if (!(obj instanceof Byte)) { super.write(buff, obj); return; } buff.put((byte) TYPE_BYTE); buff.put(((Byte) obj).byteValue()); }
@Override public void write(WriteBuffer buff, Object obj) { if (!isDate(obj)) { super.write(buff, obj); return; } buff.put((byte) TYPE_DATE); Date a = (Date) obj; buff.putLong(a.getTime()); }
@Override public void write(WriteBuffer buff, Object obj) { if (!(obj instanceof Short)) { super.write(buff, obj); return; } buff.put((byte) TYPE_SHORT); buff.putShort(((Short) obj).shortValue()); }
@Override public void write(WriteBuffer buff, Object obj) { if (!(obj instanceof Boolean)) { super.write(buff, obj); return; } int tag = ((Boolean) obj) ? TAG_BOOLEAN_TRUE : TYPE_BOOLEAN; buff.put((byte) tag); }
@Override public void write(WriteBuffer buff, Object obj) { if (obj != null) { super.write(buff, obj); return; } buff.put((byte) TYPE_NULL); }
@Override public void write(WriteBuffer buff, Object[] obj, int len, boolean key) { for (int i = 0; i < len; i++) { write(buff, obj[i]); } }
@Override public void write(WriteBuffer buff, Object obj) { last.write(buff, obj); }