public Object getValueQuickly()

in modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryBuilderReader.java [377:512]


    public Object getValueQuickly(int pos, int len) {
        byte type = arr[pos];

        switch (type) {
            case GridBinaryMarshaller.NULL:
                return null;

            case GridBinaryMarshaller.HANDLE: {
                int objStart = pos - readIntPositioned(pos + 1);

                Object res = objMap.get(objStart);

                if (res != null)
                    return res;

                // Read handle by position
                res = getValueQuickly(objStart, len - (objStart - pos));

                objMap.put(objStart, res);

                return res;
            }

            case GridBinaryMarshaller.OBJ: {
                Object res = objMap.get(pos);

                if (res == null) {
                    res = new BinaryObjectBuilderImpl(new BinaryBuilderReader(this, pos), pos);

                    objMap.put(pos, res);
                }

                return res;
            }

            case GridBinaryMarshaller.BYTE:
                return arr[pos + 1];

            case GridBinaryMarshaller.SHORT:
                return BinaryPrimitives.readShort(arr, pos + 1);

            case GridBinaryMarshaller.INT:
                return BinaryPrimitives.readInt(arr, pos + 1);

            case GridBinaryMarshaller.LONG:
                return BinaryPrimitives.readLong(arr, pos + 1);

            case GridBinaryMarshaller.FLOAT:
                return BinaryPrimitives.readFloat(arr, pos + 1);

            case GridBinaryMarshaller.DOUBLE:
                return BinaryPrimitives.readDouble(arr, pos + 1);

            case GridBinaryMarshaller.CHAR:
                return BinaryPrimitives.readChar(arr, pos + 1);

            case GridBinaryMarshaller.BOOLEAN:
                return arr[pos + 1] != 0;

            case GridBinaryMarshaller.DECIMAL:
            case GridBinaryMarshaller.STRING:
            case GridBinaryMarshaller.UUID:
            case GridBinaryMarshaller.DATE:
            case GridBinaryMarshaller.TIMESTAMP:
            case GridBinaryMarshaller.TIME:
                return new BinaryPlainLazyValue(this, pos, len);

            case GridBinaryMarshaller.BYTE_ARR:
            case GridBinaryMarshaller.SHORT_ARR:
            case GridBinaryMarshaller.INT_ARR:
            case GridBinaryMarshaller.LONG_ARR:
            case GridBinaryMarshaller.FLOAT_ARR:
            case GridBinaryMarshaller.DOUBLE_ARR:
            case GridBinaryMarshaller.CHAR_ARR:
            case GridBinaryMarshaller.BOOLEAN_ARR:
            case GridBinaryMarshaller.DECIMAL_ARR:
            case GridBinaryMarshaller.DATE_ARR:
            case GridBinaryMarshaller.TIMESTAMP_ARR:
            case GridBinaryMarshaller.TIME_ARR:
            case GridBinaryMarshaller.UUID_ARR:
            case GridBinaryMarshaller.STRING_ARR:
            case GridBinaryMarshaller.ENUM_ARR:
            case GridBinaryMarshaller.OBJ_ARR:
            case GridBinaryMarshaller.COL:
            case GridBinaryMarshaller.MAP: {
                Object res = objMap.get(pos);

                if (res != null)
                    return res;

                res = new LazyCollection(pos);

                objMap.put(pos, res);

                return res;
            }

            case GridBinaryMarshaller.ENUM: {
                if (len == 1) {
                    assert readByte(pos) == GridBinaryMarshaller.NULL;

                    return null;
                }

                int mark = position();
                position(pos + 1);

                BinaryBuilderEnum builderEnum = new BinaryBuilderEnum(this);

                position(mark);

                return builderEnum;
            }

            case GridBinaryMarshaller.BINARY_OBJ: {
                int size = readIntPositioned(pos + 1);

                int start = readIntPositioned(pos + 4 + size);

                BinaryObject binaryObj = BinaryUtils.binaryObject(ctx, arr, pos + 4 + start);

                return new BinaryPlainBinaryObject(binaryObj);
            }

            case GridBinaryMarshaller.OPTM_MARSH: {
                final BinaryInputStream bin = BinaryStreams.inputStream(arr, pos + 1);

                final Object obj = BinaryUtils.doReadOptimized(bin, ctx, U.resolveClassLoader(ctx.configuration()));

                return obj;
            }

            default:
                throw new BinaryObjectException("Invalid flag value: " + type);
        }
    }