public Object decodeObject(NSCoder coder) { String type = _decodeUTF8(coder); switch (type.charAt(0)) { case 'c': return new Byte(coder.decodeByte()); case 's': return new Short(coder.decodeShort()); case 'i': return new Integer(coder.decodeInt()); case 'l': return new Long(coder.decodeLong()); case 'f': return new Float(coder.decodeFloat()); case 'd': return new Double(coder.decodeDouble()); case 'e': case 'g': case 'h': case 'j': case 'k': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': } throw new IllegalStateException("decodeObject: unsupported number type: " + type); }
protected static BigInteger _decodeBigInteger(NSCoder coder, int exponent) { short length = coder.decodeShort(); boolean isNegative = coder.decodeBoolean(); coder.decodeBoolean(); int shortCount = coder.decodeInt(); byte[] bytes = new byte[length * 2]; int i; for (i = 0; i < shortCount; ++i) { short part = coder.decodeShort(); if (i < length) { _copyShortToByteArray(part, bytes, (length - (i + 1)) * 2); } } BigInteger result = new BigInteger((isNegative) ? -1 : 1, bytes); if (exponent != 0) { bytes = new byte[4]; int powerOfTen = 10; for (i = 1; i < exponent; ++i) { powerOfTen *= 10; } _copyIntToByteArray(powerOfTen, bytes, 0); BigInteger factor = new BigInteger(bytes); result = (exponent > 0) ? result.multiply(factor) : result.divide(factor); } return result; }
public Object decodeObject(NSCoder coder) { int exponent = coder.decodeInt(); return _decodeBigInteger(coder, exponent); }
public Object decodeObject(NSCoder coder) { int exponent = coder.decodeInt(); BigInteger mantissa = _decodeBigInteger(coder, (exponent > 0) ? exponent : 0); return new BigDecimal(mantissa, (exponent > 0) ? 0 : -exponent); }