Ejemplo n.º 1
0
    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);
    }
Ejemplo n.º 2
0
    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;
    }
Ejemplo n.º 3
0
 public Object decodeObject(NSCoder coder) {
   int exponent = coder.decodeInt();
   return _decodeBigInteger(coder, exponent);
 }
Ejemplo n.º 4
0
    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);
    }