package com.taobao.tddl.optimizer.core.datatype; import com.taobao.tddl.common.exception.TddlRuntimeException; public class ShortType extends CommonType<Short> { private final Calculator calculator = new Calculator() { @Override public Object add(Object v1, Object v2) { Short i1 = convertFrom(v1); Short i2 = convertFrom(v2); return i1 + i2; } @Override public Object sub(Object v1, Object v2) { Short i1 = convertFrom(v1); Short i2 = convertFrom(v2); return i1 - i2; } @Override public Object multiply(Object v1, Object v2) { Short i1 = convertFrom(v1); Short i2 = convertFrom(v2); return i1 * i2; } @Override public Object divide(Object v1, Object v2) { Short i1 = convertFrom(v1); Short i2 = convertFrom(v2); return i1 / i2; } @Override public Object mod(Object v1, Object v2) { Short i1 = convertFrom(v1); Short i2 = convertFrom(v2); return i1 % i2; } @Override public Object and(Object v1, Object v2) { Short i1 = convertFrom(v1); Short i2 = convertFrom(v2); return (i1 != 0) && (i2 != 0); } @Override public Object or(Object v1, Object v2) { Short i1 = convertFrom(v1); Short i2 = convertFrom(v2); return (i1 != 0) || (i2 != 0); } @Override public Object not(Object v1) { Short i1 = convertFrom(v1); return i1 == 0; } @Override public Object bitAnd(Object v1, Object v2) { Short i1 = convertFrom(v1); Short i2 = convertFrom(v2); return i1 & i2; } @Override public Object bitOr(Object v1, Object v2) { Short i1 = convertFrom(v1); Short i2 = convertFrom(v2); return i1 | i2; } @Override public Object bitNot(Object v1) { Short i1 = convertFrom(v1); return ~i1; } @Override public Object xor(Object v1, Object v2) { Short i1 = convertFrom(v1); Short i2 = convertFrom(v2); return (i1 != 0) ^ (i2 != 0); } @Override public Object bitXor(Object v1, Object v2) { Short i1 = convertFrom(v1); Short i2 = convertFrom(v2); return i1 ^ i2; } }; @Override public int encodeToBytes(Object value, byte[] dst, int offset) { return DataEncoder.encode(this.convertFrom(value), dst, offset); } @Override public int getLength(Object value) { if (value == null) { return 1; } else { return 3; } } @Override public DecodeResult decodeFromBytes(byte[] bytes, int offset) { try { Short v = DataDecoder.decodeShortObj(bytes, offset); return new DecodeResult(v, getLength(v)); } catch (CorruptEncodingException e) { throw new TddlRuntimeException(e); } } @Override public Short incr(Object value) { return (short) (convertFrom(value) + 1); } @Override public Short decr(Object value) { return (short) (convertFrom(value) - 1); } @Override public Short getMaxValue() { return Short.MAX_VALUE; } @Override public Short getMinValue() { return Short.MIN_VALUE; } @Override public Calculator getCalculator() { return calculator; } }