private static int compareAsNumeric(byte type1, byte[] b1, int o1, byte type2, byte[] b2, int o2) { switch (type1 << 8 | type2) { case BYTE_TO_BYTE: return compareAsShort (getByte (b1, o1), getByte (b2, o2)); case BYTE_TO_SHORT: return compareAsShort (getByte (b1, o1), getShort (b2, o2)); case BYTE_TO_INT: return compareAsInt (getByte (b1, o1), getInt (b2, o2)); case BYTE_TO_LONG: return compareAsLong (getByte (b1, o1), getLong (b2, o2)); case BYTE_TO_FLOAT: return compareAsFloat (getByte (b1, o1), getFloat (b2, o2)); case BYTE_TO_DOUBLE: return compareAsDouble(getByte (b1, o1), getDouble(b2, o2)); case SHORT_TO_BYTE: return compareAsShort (getShort (b1, o1), getByte (b2, o2)); case SHORT_TO_SHORT: return compareAsShort (getShort (b1, o1), getShort (b2, o2)); case SHORT_TO_INT: return compareAsInt (getShort (b1, o1), getInt (b2, o2)); case INT_TO_BYTE: return compareAsInt (getInt (b1, o1), getByte (b2, o2)); case INT_TO_SHORT: return compareAsInt (getInt (b1, o1), getShort (b2, o2)); case INT_TO_INT: return compareAsInt (getInt (b1, o1), getInt (b2, o2)); case LONG_TO_BYTE: return compareAsLong (getLong (b1, o1), getByte (b2, o2)); case LONG_TO_SHORT: return compareAsLong (getLong (b1, o1), getShort (b2, o2)); case LONG_TO_INT: return compareAsLong (getLong (b1, o1), getInt (b2, o2)); case FLOAT_TO_BYTE: return compareAsFloat (getFloat (b1, o1), getByte (b2, o2)); case FLOAT_TO_SHORT: return compareAsFloat (getFloat (b1, o1), getShort (b2, o2)); case FLOAT_TO_INT: return compareAsFloat (getFloat (b1, o1), getInt (b2, o2)); case DOUBLE_TO_BYTE: return compareAsDouble(getDouble(b1, o1), getByte (b2, o2)); case DOUBLE_TO_SHORT: return compareAsDouble(getDouble(b1, o1), getShort (b2, o2)); case DOUBLE_TO_INT: return compareAsDouble(getDouble(b1, o1), getInt (b2, o2));