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);
}
}