You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ak...@apache.org on 2015/12/11 16:55:49 UTC

[21/59] [abbrv] ignite git commit: ignite-2065: rename "portable" packages to "binary"

http://git-wip-us.apache.org/repos/asf/ignite/blob/1dbf20e0/modules/core/src/main/java/org/apache/ignite/internal/portable/BinaryReaderExImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/BinaryReaderExImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/BinaryReaderExImpl.java
deleted file mode 100644
index 6a8091f..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/portable/BinaryReaderExImpl.java
+++ /dev/null
@@ -1,2028 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.portable;
-
-import java.io.EOFException;
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.math.BigDecimal;
-import java.sql.Timestamp;
-import java.util.Collection;
-import java.util.Date;
-import java.util.Map;
-import java.util.UUID;
-
-import org.apache.ignite.binary.BinaryCollectionFactory;
-import org.apache.ignite.binary.BinaryIdMapper;
-import org.apache.ignite.binary.BinaryInvalidTypeException;
-import org.apache.ignite.binary.BinaryMapFactory;
-import org.apache.ignite.binary.BinaryObject;
-import org.apache.ignite.binary.BinaryObjectException;
-import org.apache.ignite.binary.BinaryRawReader;
-import org.apache.ignite.binary.BinaryReader;
-import org.apache.ignite.internal.portable.streams.PortableInputStream;
-import org.apache.ignite.internal.util.typedef.internal.SB;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.BOOLEAN;
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.BOOLEAN_ARR;
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.BYTE;
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.BYTE_ARR;
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.CHAR;
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.CHAR_ARR;
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.CLASS;
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.COL;
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.DATE;
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.DATE_ARR;
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.DECIMAL;
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.DECIMAL_ARR;
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.DFLT_HDR_LEN;
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.DOUBLE;
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.DOUBLE_ARR;
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.ENUM;
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.ENUM_ARR;
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.FLOAT;
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.FLOAT_ARR;
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.HANDLE;
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.INT;
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.INT_ARR;
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.LONG;
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.LONG_ARR;
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.MAP;
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.NULL;
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.OBJ;
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.OBJ_ARR;
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.OPTM_MARSH;
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.PORTABLE_OBJ;
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.SHORT;
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.SHORT_ARR;
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.STRING;
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.STRING_ARR;
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.TIMESTAMP;
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.TIMESTAMP_ARR;
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.UNREGISTERED_TYPE_ID;
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.UUID;
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.UUID_ARR;
-
-/**
- * Portable reader implementation.
- */
-@SuppressWarnings("unchecked")
-public class BinaryReaderExImpl implements BinaryReader, BinaryRawReaderEx, BinaryReaderHandlesHolder, ObjectInput {
-    /** Portable context. */
-    private final PortableContext ctx;
-
-    /** Input stream. */
-    private final PortableInputStream in;
-
-    /** Class loaded. */
-    private final ClassLoader ldr;
-
-    /** Reader context which is constantly passed between objects. */
-    private BinaryReaderHandles hnds;
-
-    /** */
-    private final int start;
-
-    /** Start of actual data. Positioned right after the header. */
-    private final int dataStart;
-
-    /** Type ID. */
-    private final int typeId;
-
-    /** Raw offset. */
-    private final int rawOff;
-
-    /** Footer start. */
-    private final int footerStart;
-
-    /** Footer end. */
-    private final int footerLen;
-
-    /** ID mapper. */
-    private final BinaryIdMapper idMapper;
-
-    /** Schema Id. */
-    private final int schemaId;
-
-    /** Whether this is user type or not. */
-    private final boolean userType;
-
-    /** Whether field IDs exist. */
-    private final int fieldIdLen;
-
-    /** Offset size in bytes. */
-    private final int fieldOffsetLen;
-
-    /** Object schema. */
-    private final PortableSchema schema;
-
-    /** Whether passed IDs matches schema order. Reset to false as soon as a single mismatch detected. */
-    private boolean matching = true;
-
-    /** Order of a field whose match is expected. */
-    private int matchingOrder;
-
-    /** Whether stream is in raw mode. */
-    private boolean raw;
-
-    /**
-     * Constructor.
-     *
-     * @param ctx Context.
-     * @param in Input stream.
-     * @param ldr Class loader.
-     */
-    public BinaryReaderExImpl(PortableContext ctx, PortableInputStream in, ClassLoader ldr) {
-        this(ctx, in, ldr, null);
-    }
-
-    /**
-     * Constructor.
-     *
-     * @param ctx Context.
-     * @param in Input stream.
-     * @param ldr Class loader.
-     * @param hnds Context.
-     */
-    public BinaryReaderExImpl(PortableContext ctx, PortableInputStream in, ClassLoader ldr,
-        @Nullable BinaryReaderHandles hnds) {
-        this(ctx, in, ldr, hnds, false);
-    }
-
-    /**
-     * Constructor.
-     *
-     * @param ctx Context.
-     * @param in Input stream.
-     * @param ldr Class loader.
-     * @param hnds Context.
-     * @param skipHdrCheck Whether to skip header check.
-     */
-    public BinaryReaderExImpl(PortableContext ctx, PortableInputStream in, ClassLoader ldr,
-        @Nullable BinaryReaderHandles hnds, boolean skipHdrCheck) {
-        // Initialize base members.
-        this.ctx = ctx;
-        this.in = in;
-        this.ldr = ldr;
-        this.hnds = hnds;
-
-        start = in.position();
-
-        // Perform full header parsing in case of portable object.
-        if (!skipHdrCheck && (in.readByte() == GridPortableMarshaller.OBJ)) {
-            // Ensure protocol is fine.
-            PortableUtils.checkProtocolVersion(in.readByte());
-
-            // Read header content.
-            short flags = in.readShort();
-            int typeId0 = in.readInt();
-
-            in.readInt(); // Skip hash code.
-
-            int len = in.readInt();
-            schemaId = in.readInt();
-            int offset = in.readInt();
-
-            // Get trivial flag values.
-            userType = PortableUtils.isUserType(flags);
-            fieldIdLen = PortableUtils.fieldIdLength(flags);
-            fieldOffsetLen = PortableUtils.fieldOffsetLength(flags);
-
-            // Calculate footer borders and raw offset.
-            if (PortableUtils.hasSchema(flags)) {
-                // Schema exists.
-                footerStart = start + offset;
-
-                if (PortableUtils.hasRaw(flags)) {
-                    footerLen = len - offset - 4;
-                    rawOff = start + in.readIntPositioned(start + len - 4);
-                }
-                else {
-                    footerLen = len - offset;
-                    rawOff = start + len;
-                }
-            }
-            else {
-                // No schema.
-                footerStart = start + len;
-                footerLen = 0;
-
-                if (PortableUtils.hasRaw(flags))
-                    rawOff = start + offset;
-                else
-                    rawOff = start + len;
-            }
-
-            // Finally, we have to resolve real type ID.
-            if (typeId0 == UNREGISTERED_TYPE_ID) {
-                int off = in.position();
-
-                // Registers class by type ID, at least locally if the cache is not ready yet.
-                typeId = ctx.descriptorForClass(PortableUtils.doReadClass(in, ctx, ldr, typeId0), false).typeId();
-
-                int clsNameLen = in.position() - off;
-
-                dataStart = start + DFLT_HDR_LEN + clsNameLen;
-            }
-            else {
-                typeId = typeId0;
-
-                dataStart = start + DFLT_HDR_LEN;
-            }
-
-            idMapper = userType ? ctx.userTypeIdMapper(typeId) : BinaryInternalIdMapper.defaultInstance();
-            schema = PortableUtils.hasSchema(flags) ? getOrCreateSchema() : null;
-        }
-        else {
-            dataStart = 0;
-            typeId = 0;
-            rawOff = 0;
-            footerStart = 0;
-            footerLen = 0;
-            idMapper = null;
-            schemaId = 0;
-            userType = false;
-            fieldIdLen = 0;
-            fieldOffsetLen = 0;
-            schema = null;
-        }
-
-        streamPosition(start);
-    }
-
-    /**
-     * @return Input stream.
-     */
-    public PortableInputStream in() {
-        return in;
-    }
-
-    /**
-     * @return Descriptor.
-     */
-    PortableClassDescriptor descriptor() {
-        return ctx.descriptorForTypeId(userType, typeId, ldr, true);
-    }
-
-    /**
-     * @param offset Offset in the array.
-     * @return Unmarshalled value.
-     * @throws BinaryObjectException In case of error.
-     */
-    public Object unmarshal(int offset) throws BinaryObjectException {
-        streamPosition(offset);
-
-        return in.position() >= 0 ? PortableUtils.unmarshal(in, ctx, ldr, this) : null;
-    }
-
-    /**
-     * @param fieldName Field name.
-     * @return Unmarshalled value.
-     * @throws BinaryObjectException In case of error.
-     */
-    @Nullable Object unmarshalField(String fieldName) throws BinaryObjectException {
-        return findFieldByName(fieldName) ? PortableUtils.unmarshal(in, ctx, ldr, this) : null;
-    }
-
-    /**
-     * @param fieldId Field ID.
-     * @return Unmarshalled value.
-     * @throws BinaryObjectException In case of error.
-     */
-    @Nullable Object unmarshalField(int fieldId) throws BinaryObjectException {
-        return findFieldById(fieldId) ? PortableUtils.unmarshal(in, ctx, ldr, this) : null;
-    }
-
-    /**
-     * @param fieldId Field ID.
-     * @return Portable object.
-     * @throws BinaryObjectException In case of error.
-     */
-    @Nullable BinaryObject readPortableObject(int fieldId) throws BinaryObjectException {
-        if (findFieldById(fieldId)) {
-            if (checkFlag(PORTABLE_OBJ) == Flag.NULL)
-                return null;
-
-            return new BinaryObjectImpl(ctx, PortableUtils.doReadByteArray(in), in.readInt());
-        }
-        else
-            return null;
-    }
-
-    /**
-     * @param fieldId Field ID.
-     * @return Field class.
-     * @throws BinaryObjectException In case of error.
-     */
-    @Nullable Class<?> readClass(int fieldId) throws BinaryObjectException {
-        if (findFieldById(fieldId)) {
-            if (checkFlag(CLASS) == Flag.NULL)
-                return null;
-
-            return PortableUtils.doReadClass(in, ctx, ldr);
-        }
-
-        return null;
-    }
-
-    /**
-     * @param obj Object.
-     */
-    void setHandle(Object obj) {
-        setHandle(obj, start);
-    }
-
-    /** {@inheritDoc} */
-    @Override public void setHandle(Object obj, int pos) {
-        handles().put(pos, obj);
-    }
-
-    /** {@inheritDoc} */
-    @Override public Object getHandle(int pos) {
-        return hnds != null ? hnds.get(pos) : null;
-    }
-
-    /** {@inheritDoc} */
-    @Override public BinaryReaderHandles handles() {
-        if (hnds == null)
-            hnds = new BinaryReaderHandles();
-
-        return hnds;
-    }
-
-    /**
-     * Recreating field value from a handle.
-     *
-     * @param <T> Field type.
-     * @return Field.
-     */
-    private <T> T readHandleField() {
-        int handlePos = PortableUtils.positionForHandle(in) - in.readInt();
-
-        Object obj = getHandle(handlePos);
-
-        if (obj == null) {
-            int retPos = in.position();
-
-            streamPosition(handlePos);
-
-            obj = PortableUtils.doReadObject(in, ctx, ldr, this);
-
-            streamPosition(retPos);
-        }
-
-        return (T)obj;
-    }
-    /** {@inheritDoc} */
-    @Override public byte readByte(String fieldName) throws BinaryObjectException {
-        return findFieldByName(fieldName) && checkFlagNoHandles(BYTE) == Flag.NORMAL ? in.readByte() : 0;
-    }
-
-    /**
-     * @param fieldId Field ID.
-     * @return Value.
-     * @throws BinaryObjectException If failed.
-     */
-    byte readByte(int fieldId) throws BinaryObjectException {
-        return findFieldById(fieldId) && checkFlagNoHandles(BYTE) == Flag.NORMAL ? in.readByte() : 0;
-    }
-
-    /**
-     * @param fieldId Field ID.
-     * @return Value.
-     * @throws BinaryObjectException In case of error.
-     */
-    @Nullable Byte readByteNullable(int fieldId) throws BinaryObjectException {
-        return findFieldById(fieldId) && checkFlagNoHandles(BYTE) == Flag.NORMAL ? in.readByte() : null;
-    }
-
-    /** {@inheritDoc} */
-    @Override public byte readByte() throws BinaryObjectException {
-        return in.readByte();
-    }
-
-    /** {@inheritDoc} */
-    @Nullable @Override public byte[] readByteArray(String fieldName) throws BinaryObjectException {
-        return findFieldByName(fieldName) ? this.readByteArray() : null;
-    }
-
-    /**
-     * @param fieldId Field ID.
-     * @return Value.
-     * @throws BinaryObjectException In case of error.
-     */
-    @Nullable byte[] readByteArray(int fieldId) throws BinaryObjectException {
-        return findFieldById(fieldId) ? this.readByteArray() : null;
-    }
-
-    /** {@inheritDoc} */
-    @Nullable @Override public byte[] readByteArray() throws BinaryObjectException {
-        switch (checkFlag(BYTE_ARR)) {
-            case NORMAL:
-                return PortableUtils.doReadByteArray(in);
-
-            case HANDLE:
-                return readHandleField();
-
-            default:
-                return null;
-        }
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean readBoolean(String fieldName) throws BinaryObjectException {
-        return findFieldByName(fieldName) && checkFlagNoHandles(BOOLEAN) == Flag.NORMAL && in.readBoolean();
-    }
-
-    /**
-     * @param fieldId Field ID.
-     * @return Value.
-     * @throws BinaryObjectException If failed.
-     */
-    boolean readBoolean(int fieldId) throws BinaryObjectException {
-        return findFieldById(fieldId) && checkFlagNoHandles(BOOLEAN) == Flag.NORMAL && in.readBoolean();
-    }
-
-    /**
-     * @param fieldId Field ID.
-     * @return Value.
-     * @throws BinaryObjectException In case of error.
-     */
-    @Nullable Boolean readBooleanNullable(int fieldId) throws BinaryObjectException {
-        return findFieldById(fieldId) && checkFlagNoHandles(BOOLEAN) == Flag.NORMAL ? in.readBoolean() : null;
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean readBoolean() throws BinaryObjectException {
-        return in.readBoolean();
-    }
-
-    /** {@inheritDoc} */
-    @Nullable @Override public boolean[] readBooleanArray(String fieldName) throws BinaryObjectException {
-        return findFieldByName(fieldName) ? this.readBooleanArray() : null;
-    }
-
-    /**
-     * @param fieldId Field ID.
-     * @return Value.
-     * @throws BinaryObjectException In case of error.
-     */
-    @Nullable boolean[] readBooleanArray(int fieldId) throws BinaryObjectException {
-        return findFieldById(fieldId) ? this.readBooleanArray() : null;
-    }
-
-    /** {@inheritDoc} */
-    @Nullable @Override public boolean[] readBooleanArray() throws BinaryObjectException {
-        switch (checkFlag(BOOLEAN_ARR)) {
-            case NORMAL:
-                return PortableUtils.doReadBooleanArray(in);
-
-            case HANDLE:
-                return readHandleField();
-
-            default:
-                return null;
-        }
-    }
-
-    /** {@inheritDoc} */
-    @Override public short readShort(String fieldName) throws BinaryObjectException {
-        return findFieldByName(fieldName) && checkFlagNoHandles(SHORT) == Flag.NORMAL ? in.readShort() : 0;
-    }
-
-    /**
-     * @param fieldId Field ID.
-     * @return Value.
-     * @throws BinaryObjectException If failed.
-     */
-    short readShort(int fieldId) throws BinaryObjectException {
-        return findFieldById(fieldId) && checkFlagNoHandles(SHORT) == Flag.NORMAL ? in.readShort() : 0;
-    }
-
-    /**
-     * @param fieldId Field ID.
-     * @return Value.
-     * @throws BinaryObjectException In case of error.
-     */
-    @Nullable Short readShortNullable(int fieldId) throws BinaryObjectException {
-        return findFieldById(fieldId) && checkFlagNoHandles(SHORT) == Flag.NORMAL ? in.readShort() : null;
-    }
-
-    /** {@inheritDoc} */
-    @Override public short readShort() throws BinaryObjectException {
-        return in.readShort();
-    }
-
-    /** {@inheritDoc} */
-    @Nullable @Override public short[] readShortArray(String fieldName) throws BinaryObjectException {
-        return findFieldByName(fieldName) ? this.readShortArray() : null;
-    }
-
-    /**
-     * @param fieldId Field ID.
-     * @return Value.
-     * @throws BinaryObjectException In case of error.
-     */
-    @Nullable short[] readShortArray(int fieldId) throws BinaryObjectException {
-        return findFieldById(fieldId) ? this.readShortArray() : null;
-    }
-
-    /** {@inheritDoc} */
-    @Nullable @Override public short[] readShortArray() throws BinaryObjectException {
-        switch (checkFlag(SHORT_ARR)) {
-            case NORMAL:
-                return PortableUtils.doReadShortArray(in);
-
-            case HANDLE:
-                return readHandleField();
-
-            default:
-                return null;
-        }
-    }
-
-    /** {@inheritDoc} */
-    @Override public char readChar(String fieldName) throws BinaryObjectException {
-        return findFieldByName(fieldName) && checkFlagNoHandles(CHAR) == Flag.NORMAL ? in.readChar() : 0;
-    }
-
-    /**
-     * @param fieldId Field ID.
-     * @return Value.
-     * @throws BinaryObjectException If failed.
-     */
-    char readChar(int fieldId) throws BinaryObjectException {
-        return findFieldById(fieldId) && checkFlagNoHandles(CHAR) == Flag.NORMAL ? in.readChar() : 0;
-    }
-
-    /**
-     * @param fieldId Field ID.
-     * @return Value.
-     * @throws BinaryObjectException In case of error.
-     */
-    @Nullable Character readCharNullable(int fieldId) throws BinaryObjectException {
-        return findFieldById(fieldId) && checkFlagNoHandles(CHAR) == Flag.NORMAL ? in.readChar() : null;
-    }
-
-    /** {@inheritDoc} */
-    @Override public char readChar() throws BinaryObjectException {
-        return in.readChar();
-    }
-
-    /** {@inheritDoc} */
-    @Nullable @Override public char[] readCharArray(String fieldName) throws BinaryObjectException {
-        return findFieldByName(fieldName) ? this.readCharArray() : null;
-    }
-
-    /**
-     * @param fieldId Field ID.
-     * @return Value.
-     * @throws BinaryObjectException In case of error.
-     */
-    @Nullable char[] readCharArray(int fieldId) throws BinaryObjectException {
-        return findFieldById(fieldId) ? this.readCharArray() : null;
-    }
-
-    /** {@inheritDoc} */
-    @Nullable @Override public char[] readCharArray() throws BinaryObjectException {
-        switch (checkFlag(CHAR_ARR)) {
-            case NORMAL:
-                return PortableUtils.doReadCharArray(in);
-
-            case HANDLE:
-                return readHandleField();
-
-            default:
-                return null;
-        }
-    }
-
-    /** {@inheritDoc} */
-    @Override public int readInt(String fieldName) throws BinaryObjectException {
-        return findFieldByName(fieldName) && checkFlagNoHandles(INT) == Flag.NORMAL ? in.readInt() : 0;
-    }
-
-    /**
-     * @param fieldId Field ID.
-     * @return Value.
-     * @throws BinaryObjectException If failed.
-     */
-    int readInt(int fieldId) throws BinaryObjectException {
-        return findFieldById(fieldId) && checkFlagNoHandles(INT) == Flag.NORMAL ? in.readInt() : 0;
-    }
-
-    /**
-     * @param fieldId Field ID.
-     * @return Value.
-     * @throws BinaryObjectException In case of error.
-     */
-    @Nullable Integer readIntNullable(int fieldId) throws BinaryObjectException {
-        return findFieldById(fieldId) && checkFlagNoHandles(INT) == Flag.NORMAL ? in.readInt() : null;
-    }
-    
-    /** {@inheritDoc} */
-    @Override public int readInt() throws BinaryObjectException {
-        return in.readInt();
-    }
-
-    /** {@inheritDoc} */
-    @Nullable @Override public int[] readIntArray(String fieldName) throws BinaryObjectException {
-        return findFieldByName(fieldName) ? this.readIntArray() : null;
-    }
-
-    /**
-     * @param fieldId Field ID.
-     * @return Value.
-     * @throws BinaryObjectException In case of error.
-     */
-    @Nullable int[] readIntArray(int fieldId) throws BinaryObjectException {
-        return findFieldById(fieldId) ? this.readIntArray() : null;
-    }
-
-    /** {@inheritDoc} */
-    @Nullable @Override public int[] readIntArray() throws BinaryObjectException {
-        switch (checkFlag(INT_ARR)) {
-            case NORMAL:
-                return PortableUtils.doReadIntArray(in);
-
-            case HANDLE:
-                return readHandleField();
-
-            default:
-                return null;
-        }
-    }
-
-    /** {@inheritDoc} */
-    @Override public long readLong(String fieldName) throws BinaryObjectException {
-        return findFieldByName(fieldName) && checkFlagNoHandles(LONG) == Flag.NORMAL ? in.readLong() : 0;
-    }
-
-    /**
-     * @param fieldId Field ID.
-     * @return Value.
-     * @throws BinaryObjectException If failed.
-     */
-    long readLong(int fieldId) throws BinaryObjectException {
-        return findFieldById(fieldId) && checkFlagNoHandles(LONG) == Flag.NORMAL ? in.readLong() : 0;
-    }
-
-    /**
-     * @param fieldId Field ID.
-     * @return Value.
-     * @throws BinaryObjectException In case of error.
-     */
-    @Nullable Long readLongNullable(int fieldId) throws BinaryObjectException {
-        return findFieldById(fieldId) && checkFlagNoHandles(LONG) == Flag.NORMAL ? in.readLong() : null;
-    }
-
-    /** {@inheritDoc} */
-    @Override public long readLong() throws BinaryObjectException {
-        return in.readLong();
-    }
-
-    /** {@inheritDoc} */
-    @Nullable @Override public long[] readLongArray(String fieldName) throws BinaryObjectException {
-        return findFieldByName(fieldName) ? this.readLongArray() : null;
-    }
-
-    /**
-     * @param fieldId Field ID.
-     * @return Value.
-     * @throws BinaryObjectException In case of error.
-     */
-    @Nullable long[] readLongArray(int fieldId) throws BinaryObjectException {
-        return findFieldById(fieldId) ? this.readLongArray() : null;
-    }
-
-    /** {@inheritDoc} */
-    @Nullable @Override public long[] readLongArray() throws BinaryObjectException {
-        switch (checkFlag(LONG_ARR)) {
-            case NORMAL:
-                return PortableUtils.doReadLongArray(in);
-
-            case HANDLE:
-                return readHandleField();
-
-            default:
-                return null;
-        }
-    }
-
-    /** {@inheritDoc} */
-    @Override public float readFloat(String fieldName) throws BinaryObjectException {
-        return findFieldByName(fieldName) && checkFlagNoHandles(FLOAT) == Flag.NORMAL ? in.readFloat() : 0;
-    }
-
-    /**
-     * @param fieldId Field ID.
-     * @return Value.
-     * @throws BinaryObjectException If failed.
-     */
-    float readFloat(int fieldId) throws BinaryObjectException {
-        return findFieldById(fieldId) && checkFlagNoHandles(FLOAT) == Flag.NORMAL ? in.readFloat() : 0;
-    }
-
-    /**
-     * @param fieldId Field ID.
-     * @return Value.
-     * @throws BinaryObjectException In case of error.
-     */
-    @Nullable Float readFloatNullable(int fieldId) throws BinaryObjectException {
-        return findFieldById(fieldId) && checkFlagNoHandles(FLOAT) == Flag.NORMAL ? in.readFloat() : null;
-    }
-
-    /** {@inheritDoc} */
-    @Override public float readFloat() throws BinaryObjectException {
-        return in.readFloat();
-    }
-
-    /** {@inheritDoc} */
-    @Nullable @Override public float[] readFloatArray(String fieldName) throws BinaryObjectException {
-        return findFieldByName(fieldName) ? this.readFloatArray() : null;
-    }
-
-    /**
-     * @param fieldId Field ID.
-     * @return Value.
-     * @throws BinaryObjectException In case of error.
-     */
-    @Nullable float[] readFloatArray(int fieldId) throws BinaryObjectException {
-        return findFieldById(fieldId) ? this.readFloatArray() : null;
-    }
-
-    /** {@inheritDoc} */
-    @Nullable @Override public float[] readFloatArray() throws BinaryObjectException {
-        switch (checkFlag(FLOAT_ARR)) {
-            case NORMAL:
-                return PortableUtils.doReadFloatArray(in);
-
-            case HANDLE:
-                return readHandleField();
-
-            default:
-                return null;
-        }
-    }
-
-    /** {@inheritDoc} */
-    @Override public double readDouble(String fieldName) throws BinaryObjectException {
-        return findFieldByName(fieldName) && checkFlagNoHandles(DOUBLE) == Flag.NORMAL ? in.readDouble() : 0;
-    }
-
-    /**
-     * @param fieldId Field ID.
-     * @return Value.
-     * @throws BinaryObjectException If failed.
-     */
-    double readDouble(int fieldId) throws BinaryObjectException {
-        return findFieldById(fieldId) && checkFlagNoHandles(DOUBLE) == Flag.NORMAL ? in.readDouble() : 0;
-    }
-
-    /**
-     * @param fieldId Field ID.
-     * @return Value.
-     * @throws BinaryObjectException In case of error.
-     */
-    @Nullable Double readDoubleNullable(int fieldId) throws BinaryObjectException {
-        return findFieldById(fieldId) && checkFlagNoHandles(DOUBLE) == Flag.NORMAL ? in.readDouble() : null;
-    }
-
-    /** {@inheritDoc} */
-    @Override public double readDouble() throws BinaryObjectException {
-        return in.readDouble();
-    }
-
-    /** {@inheritDoc} */
-    @Nullable @Override public double[] readDoubleArray(String fieldName) throws BinaryObjectException {
-        return findFieldByName(fieldName) ? this.readDoubleArray() : null;
-    }
-
-    /**
-     * @param fieldId Field ID.
-     * @return Value.
-     * @throws BinaryObjectException In case of error.
-     */
-    @Nullable double[] readDoubleArray(int fieldId) throws BinaryObjectException {
-        return findFieldById(fieldId) ? this.readDoubleArray() : null;
-    }
-
-    /** {@inheritDoc} */
-    @Nullable @Override public double[] readDoubleArray() throws BinaryObjectException {
-        switch (checkFlag(DOUBLE_ARR)) {
-            case NORMAL:
-                return PortableUtils.doReadDoubleArray(in);
-
-            case HANDLE:
-                return readHandleField();
-
-            default:
-                return null;
-        }
-    }
-
-    /** {@inheritDoc} */
-    @Override @Nullable public BigDecimal readDecimal(String fieldName) throws BinaryObjectException {
-        return findFieldByName(fieldName) ? this.readDecimal() : null;
-    }
-
-    /**
-     * @param fieldId Field ID.
-     * @return Value.
-     * @throws BinaryObjectException In case of error.
-     */
-    @Nullable BigDecimal readDecimal(int fieldId) throws BinaryObjectException {
-        return findFieldById(fieldId) ? this.readDecimal() : null;
-    }
-
-    /** {@inheritDoc} */
-    @Override @Nullable public BigDecimal readDecimal() throws BinaryObjectException {
-        return checkFlagNoHandles(DECIMAL) == Flag.NORMAL ? PortableUtils.doReadDecimal(in) : null;
-    }
-
-    /** {@inheritDoc} */
-    @Override @Nullable public BigDecimal[] readDecimalArray(String fieldName) throws BinaryObjectException {
-        return findFieldByName(fieldName) ? this.readDecimalArray() : null;
-    }
-
-    /**
-     * @param fieldId Field ID.
-     * @return Value.
-     * @throws BinaryObjectException In case of error.
-     */
-    @Nullable BigDecimal[] readDecimalArray(int fieldId) throws BinaryObjectException {
-        return findFieldById(fieldId) ? this.readDecimalArray() : null;
-    }
-
-    /** {@inheritDoc} */
-    @Override @Nullable public BigDecimal[] readDecimalArray() throws BinaryObjectException {
-        switch (checkFlag(DECIMAL_ARR)) {
-            case NORMAL:
-                return PortableUtils.doReadDecimalArray(in);
-
-            case HANDLE:
-                return readHandleField();
-
-            default:
-                return null;
-        }
-    }
-
-    /** {@inheritDoc} */
-    @Override @Nullable public String readString(String fieldName) throws BinaryObjectException {
-        return findFieldByName(fieldName) ? this.readString() : null;
-    }
-
-    /**
-     * @param fieldId Field ID.
-     * @return Value.
-     * @throws BinaryObjectException In case of error.
-     */
-    @Nullable String readString(int fieldId) throws BinaryObjectException {
-        return findFieldById(fieldId) ? this.readString() : null;
-    }
-
-    /** {@inheritDoc} */
-    @Override @Nullable public String readString() throws BinaryObjectException {
-        return checkFlagNoHandles(STRING) == Flag.NORMAL ? PortableUtils.doReadString(in) : null;
-    }
-
-    /** {@inheritDoc} */
-    @Override @Nullable public String[] readStringArray(String fieldName) throws BinaryObjectException {
-        return findFieldByName(fieldName) ? this.readStringArray() : null;
-    }
-
-    /**
-     * @param fieldId Field ID.
-     * @return Value.
-     * @throws BinaryObjectException In case of error.
-     */
-    @Nullable String[] readStringArray(int fieldId) throws BinaryObjectException {
-        return findFieldById(fieldId) ? this.readStringArray() : null;
-    }
-
-    /** {@inheritDoc} */
-    @Override @Nullable public String[] readStringArray() throws BinaryObjectException {
-        switch (checkFlag(STRING_ARR)) {
-            case NORMAL:
-                return PortableUtils.doReadStringArray(in);
-
-            case HANDLE:
-                return readHandleField();
-
-            default:
-                return null;
-        }
-    }
-
-    /** {@inheritDoc} */
-    @Override @Nullable public UUID readUuid(String fieldName) throws BinaryObjectException {
-        return findFieldByName(fieldName) ? this.readUuid() : null;
-    }
-
-    /**
-     * @param fieldId Field ID.
-     * @return Value.
-     * @throws BinaryObjectException In case of error.
-     */
-    @Nullable UUID readUuid(int fieldId) throws BinaryObjectException {
-        return findFieldById(fieldId) ? this.readUuid() : null;
-    }
-
-    /** {@inheritDoc} */
-    @Override @Nullable public UUID readUuid() throws BinaryObjectException {
-        return checkFlagNoHandles(UUID) == Flag.NORMAL ? PortableUtils.doReadUuid(in) : null;
-    }
-
-    /** {@inheritDoc} */
-    @Override @Nullable public UUID[] readUuidArray(String fieldName) throws BinaryObjectException {
-        return findFieldByName(fieldName) ? this.readUuidArray() : null;
-    }
-
-    /**
-     * @param fieldId Field ID.
-     * @return Value.
-     * @throws BinaryObjectException In case of error.
-     */
-    @Nullable UUID[] readUuidArray(int fieldId) throws BinaryObjectException {
-        return findFieldById(fieldId) ? this.readUuidArray() : null;
-    }
-
-    /** {@inheritDoc} */
-    @Override @Nullable public UUID[] readUuidArray() throws BinaryObjectException {
-        switch (checkFlag(UUID_ARR)) {
-            case NORMAL:
-                return PortableUtils.doReadUuidArray(in);
-
-            case HANDLE:
-                return readHandleField();
-
-            default:
-                return null;
-        }
-    }
-
-    /** {@inheritDoc} */
-    @Override @Nullable public Date readDate(String fieldName) throws BinaryObjectException {
-        return findFieldByName(fieldName) ? this.readDate() : null;
-    }
-
-    /**
-     * @param fieldId Field ID.
-     * @return Value.
-     * @throws BinaryObjectException In case of error.
-     */
-    @Nullable Date readDate(int fieldId) throws BinaryObjectException {
-        return findFieldById(fieldId) ? this.readDate() : null;
-    }
-
-    /** {@inheritDoc} */
-    @Override @Nullable public Date readDate() throws BinaryObjectException {
-        return checkFlagNoHandles(DATE) == Flag.NORMAL ? PortableUtils.doReadDate(in) : null;
-    }
-
-    /** {@inheritDoc} */
-    @Override @Nullable public Date[] readDateArray(String fieldName) throws BinaryObjectException {
-        return findFieldByName(fieldName) ? this.readDateArray() : null;
-    }
-
-    /**
-     * @param fieldId Field ID.
-     * @return Value.
-     * @throws BinaryObjectException In case of error.
-     */
-    @Nullable Date[] readDateArray(int fieldId) throws BinaryObjectException {
-        return findFieldById(fieldId) ? this.readDateArray() : null;
-    }
-
-    /** {@inheritDoc} */
-    @Override @Nullable public Date[] readDateArray() throws BinaryObjectException {
-        switch (checkFlag(DATE_ARR)) {
-            case NORMAL:
-                return PortableUtils.doReadDateArray(in);
-
-            case HANDLE:
-                return readHandleField();
-
-            default:
-                return null;
-        }
-    }
-
-    /** {@inheritDoc} */
-    @Override @Nullable public Timestamp readTimestamp(String fieldName) throws BinaryObjectException {
-        return findFieldByName(fieldName) ? this.readTimestamp() : null;
-    }
-
-    /**
-     * @param fieldId Field ID.
-     * @return Value.
-     * @throws BinaryObjectException In case of error.
-     */
-    @Nullable Timestamp readTimestamp(int fieldId) throws BinaryObjectException {
-        return findFieldById(fieldId) ? this.readTimestamp() : null;
-    }
-
-    /** {@inheritDoc} */
-    @Override @Nullable public Timestamp readTimestamp() throws BinaryObjectException {
-        return checkFlagNoHandles(TIMESTAMP) == Flag.NORMAL ? PortableUtils.doReadTimestamp(in) : null;
-    }
-
-    /** {@inheritDoc} */
-    @Override @Nullable public Timestamp[] readTimestampArray(String fieldName) throws BinaryObjectException {
-        return findFieldByName(fieldName) ? this.readTimestampArray() : null;
-    }
-
-    /**
-     * @param fieldId Field ID.
-     * @return Value.
-     * @throws BinaryObjectException In case of error.
-     */
-    @Nullable Timestamp[] readTimestampArray(int fieldId) throws BinaryObjectException {
-        return findFieldById(fieldId) ? this.readTimestampArray() : null;
-    }
-
-    /** {@inheritDoc} */
-    @Override @Nullable public Timestamp[] readTimestampArray() throws BinaryObjectException {
-        switch (checkFlag(TIMESTAMP_ARR)) {
-            case NORMAL:
-                return PortableUtils.doReadTimestampArray(in);
-
-            case HANDLE:
-                return readHandleField();
-
-            default:
-                return null;
-        }
-    }
-
-    /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
-    @Nullable @Override public <T> T readObject(String fieldName) throws BinaryObjectException {
-        return findFieldByName(fieldName) ? (T)PortableUtils.doReadObject(in, ctx, ldr, this) : null;
-    }
-
-    /**
-     * @param fieldId Field ID.
-     * @return Value.
-     * @throws BinaryObjectException In case of error.
-     */
-    @Nullable Object readObject(int fieldId) throws BinaryObjectException {
-        return findFieldById(fieldId) ? PortableUtils.doReadObject(in, ctx, ldr, this) : null;
-    }
-
-    /** {@inheritDoc} */
-    @Override public Object readObject() throws BinaryObjectException {
-        return PortableUtils.doReadObject(in, ctx, ldr, this);
-    }
-
-    /** {@inheritDoc} */
-    @Nullable @Override public Object readObjectDetached() throws BinaryObjectException {
-        return PortableUtils.unmarshal(in, ctx, ldr, this, true);
-    }
-
-    /** {@inheritDoc} */
-    @Nullable @Override public Object[] readObjectArray(String fieldName) throws BinaryObjectException {
-        return findFieldByName(fieldName) ? this.readObjectArray() : null;
-    }
-
-    /**
-     * @param fieldId Field ID.
-     * @return Value.
-     * @throws BinaryObjectException In case of error.
-     */
-    @Nullable Object[] readObjectArray(int fieldId) throws BinaryObjectException {
-        return findFieldById(fieldId) ? this.readObjectArray() : null;
-    }
-
-    /** {@inheritDoc} */
-    @Nullable @Override public Object[] readObjectArray() throws BinaryObjectException {
-        switch (checkFlag(OBJ_ARR)) {
-            case NORMAL:
-                return PortableUtils.doReadObjectArray(in, ctx, ldr, this, true);
-
-            case HANDLE:
-                return readHandleField();
-
-            default:
-                return null;
-        }
-    }
-
-    /** {@inheritDoc} */
-    @Nullable @Override public <T extends Enum<?>> T readEnum(String fieldName) throws BinaryObjectException {
-        return findFieldByName(fieldName) ? (T)readEnum0(null) : null;
-    }
-
-    /**
-     * @param fieldId Field ID.
-     * @param cls Class.
-     * @return Value.
-     * @throws BinaryObjectException In case of error.
-     */
-    @Nullable Enum<?> readEnum(int fieldId, @Nullable Class<?> cls) throws BinaryObjectException {
-        return findFieldById(fieldId) ? readEnum0(cls) : null;
-    }
-
-    /** {@inheritDoc} */
-    @Nullable @Override public <T extends Enum<?>> T readEnum() throws BinaryObjectException {
-        return (T)readEnum0(null);
-    }
-
-    /**
-     * Internal routine to read enum for named field.
-     *
-     * @param cls Class.
-     * @return Value.
-     * @throws BinaryObjectException In case of error.
-     */
-    private Enum<?> readEnum0(@Nullable Class<?> cls) throws BinaryObjectException {
-        if (checkFlagNoHandles(ENUM) == Flag.NORMAL) {
-            // Read class even if we know it in advance to set correct stream position.
-            Class<?> cls0 = PortableUtils.doReadClass(in, ctx, ldr);
-
-            if (cls == null)
-                cls = cls0;
-
-            return PortableUtils.doReadEnum(in, cls);
-        }
-        else
-            return null;
-    }
-
-    /** {@inheritDoc} */
-    @Nullable @Override public <T extends Enum<?>> T[] readEnumArray(String fieldName)
-        throws BinaryObjectException {
-        return findFieldByName(fieldName) ? (T[])readEnumArray0(null) : null;
-    }
-
-    /**
-     * @param fieldId Field ID.
-     * @param cls Class.
-     * @return Value.
-     * @throws BinaryObjectException In case of error.
-     */
-    @Nullable Object[] readEnumArray(int fieldId, @Nullable Class<?> cls) throws BinaryObjectException {
-        return findFieldById(fieldId) ? readEnumArray0(cls) : null;
-    }
-
-    /** {@inheritDoc} */
-    @Nullable @Override public <T extends Enum<?>> T[] readEnumArray() throws BinaryObjectException {
-        return (T[])readEnumArray0(null);
-    }
-
-    /**
-     * Internal routine to read enum for named field.
-     *
-     * @param cls Class.
-     * @return Value.
-     * @throws BinaryObjectException In case of error.
-     */
-    private Object[] readEnumArray0(@Nullable Class<?> cls) throws BinaryObjectException {
-        switch (checkFlag(ENUM_ARR)) {
-            case NORMAL:
-                // Read class even if we know it in advance to set correct stream position.
-                Class<?> cls0 = PortableUtils.doReadClass(in, ctx, ldr);
-
-                if (cls == null)
-                    cls = cls0;
-
-                return PortableUtils.doReadEnumArray(in, ctx, ldr, cls);
-
-            case HANDLE:
-                return readHandleField();
-
-            default:
-                return null;
-        }
-    }
-
-    /** {@inheritDoc} */
-    @Nullable @Override public <T> Collection<T> readCollection(String fieldName) throws BinaryObjectException {
-        return findFieldByName(fieldName) ? (Collection<T>)readCollection0(null) : null;
-    }
-
-    /** {@inheritDoc} */
-    @Nullable @Override public <T> Collection<T> readCollection(String fieldName, BinaryCollectionFactory<T> factory)
-        throws BinaryObjectException {
-        return findFieldByName(fieldName) ? readCollection0(factory) : null;
-    }
-
-    /**
-     * @param fieldId Field ID.
-     * @param factory Collection factory.
-     * @return Value.
-     * @throws BinaryObjectException In case of error.
-     */
-    @Nullable <T> Collection<T> readCollection(int fieldId, @Nullable BinaryCollectionFactory<T> factory)
-        throws BinaryObjectException {
-        return findFieldById(fieldId) ? (Collection<T>)readCollection0(factory) : null;
-    }
-
-    /** {@inheritDoc} */
-    @Nullable @Override public <T> Collection<T> readCollection() throws BinaryObjectException {
-        return readCollection0(null);
-    }
-
-    /** {@inheritDoc} */
-    @Nullable @Override public <T> Collection<T> readCollection(BinaryCollectionFactory<T> factory)
-        throws BinaryObjectException {
-        return readCollection0(factory);
-    }
-
-    /**
-     * Internal read collection routine.
-     *
-     * @param factory Collection factory.
-     * @return Value.
-     * @throws BinaryObjectException If failed.
-     */
-    private Collection readCollection0(@Nullable BinaryCollectionFactory factory)
-        throws BinaryObjectException {
-        switch (checkFlag(COL)) {
-            case NORMAL:
-                return (Collection)PortableUtils.doReadCollection(in, ctx, ldr, this, true, factory);
-
-            case HANDLE: {
-                int handlePos = PortableUtils.positionForHandle(in) - in.readInt();
-
-                Object obj = getHandle(handlePos);
-
-                if (obj == null) {
-                    int retPos = in.position();
-
-                    streamPosition(handlePos);
-
-                    obj = readCollection0(factory);
-
-                    streamPosition(retPos);
-                }
-
-                return (Collection)obj;
-            }
-
-            default:
-                return null;
-        }
-    }
-
-    /** {@inheritDoc} */
-    @Nullable @Override public <K, V> Map<K, V> readMap(String fieldName) throws BinaryObjectException {
-        return findFieldByName(fieldName) ? (Map<K, V>)readMap0(null) : null;
-    }
-
-    /** {@inheritDoc} */
-    @Nullable @Override public <K, V> Map<K, V> readMap(String fieldName, BinaryMapFactory<K, V> factory)
-        throws BinaryObjectException {
-        return findFieldByName(fieldName) ? readMap0(factory) : null;
-    }
-
-    /**
-     * @param fieldId Field ID.
-     * @param factory Factory.
-     * @return Value.
-     * @throws BinaryObjectException In case of error.
-     */
-    @Nullable Map<?, ?> readMap(int fieldId, @Nullable BinaryMapFactory factory) throws BinaryObjectException {
-        return findFieldById(fieldId) ? readMap0(factory) : null;
-    }
-
-    /** {@inheritDoc} */
-    @Nullable @Override public <K, V> Map<K, V> readMap() throws BinaryObjectException {
-        return readMap0(null);
-    }
-
-    /** {@inheritDoc} */
-    @Nullable @Override public <K, V> Map<K, V> readMap(BinaryMapFactory<K, V> factory)
-        throws BinaryObjectException {
-        return readMap0(factory);
-    }
-
-    /**
-     * Internal read map routine.
-     *
-     * @param factory Factory.
-     * @return Value.
-     * @throws BinaryObjectException If failed.
-     */
-    private Map readMap0(@Nullable BinaryMapFactory factory) throws BinaryObjectException {
-        switch (checkFlag(MAP)) {
-            case NORMAL:
-                return (Map)PortableUtils.doReadMap(in, ctx, ldr, this, true, factory);
-
-            case HANDLE: {
-                int handlePos = PortableUtils.positionForHandle(in) - in.readInt();
-
-                Object obj = getHandle(handlePos);
-
-                if (obj == null) {
-                    int retPos = in.position();
-
-                    streamPosition(handlePos);
-
-                    obj = readMap0(factory);
-
-                    streamPosition(retPos);
-                }
-
-                return (Map)obj;
-            }
-
-            default:
-                return null;
-        }
-    }
-
-    /**
-     * Ensure that type flag is either null, handle or contains expected value.
-     *
-     * @param expFlag Expected value.
-     * @return Flag mode.
-     * @throws BinaryObjectException If flag is neither null, nor handle or expected.
-     */
-    private Flag checkFlag(byte expFlag) {
-        byte flag = in.readByte();
-
-        if (flag == expFlag)
-            return Flag.NORMAL;
-        else if (flag == NULL)
-            return Flag.NULL;
-        else if (flag == HANDLE)
-            return Flag.HANDLE;
-
-        int pos = PortableUtils.positionForHandle(in);
-
-        throw new BinaryObjectException("Unexpected flag value [pos=" + pos + ", expected=" + expFlag +
-            ", actual=" + flag + ']');
-    }
-
-    /**
-     * Ensure that type flag is either null or contains expected value.
-     *
-     * @param expFlag Expected value.
-     * @return Flag mode.
-     * @throws BinaryObjectException If flag is neither null, nor expected.
-     */
-    private Flag checkFlagNoHandles(byte expFlag) {
-        byte flag = in.readByte();
-
-        if (flag == expFlag)
-            return Flag.NORMAL;
-        else if (flag == NULL)
-            return Flag.NULL;
-
-        int pos = PortableUtils.positionForHandle(in);
-
-        throw new BinaryObjectException("Unexpected flag value [pos=" + pos + ", expected=" + expFlag +
-            ", actual=" + flag + ']');
-    }
-
-    /** {@inheritDoc} */
-    @Override public BinaryRawReader rawReader() {
-        if (!raw) {
-            streamPositionRandom(rawOff);
-
-            raw = true;
-
-            return this;
-        }
-        else
-            throw new BinaryObjectException("Method \"rawReader\" can be called only once.");
-    }
-
-    /**
-     * @return Deserialized object.
-     * @throws BinaryObjectException If failed.
-     */
-    @Nullable Object deserialize() throws BinaryObjectException {
-        Object obj;
-
-        byte flag = in.readByte();
-
-        switch (flag) {
-            case NULL:
-                obj = null;
-
-                break;
-
-            case HANDLE:
-                int handlePos = start - in.readInt();
-
-                obj = getHandle(handlePos);
-
-                if (obj == null) {
-                    int retPos = in.position();
-
-                    streamPosition(handlePos);
-
-                    obj = PortableUtils.doReadObject(in, ctx, ldr, this);
-
-                    streamPosition(retPos);
-                }
-
-                break;
-
-            case OBJ:
-                PortableClassDescriptor desc = ctx.descriptorForTypeId(userType, typeId, ldr, true);
-
-                streamPosition(dataStart);
-
-                if (desc == null)
-                    throw new BinaryInvalidTypeException("Unknown type ID: " + typeId);
-
-                obj = desc.read(this);
-
-                streamPosition(footerStart + footerLen);
-
-                break;
-
-            case BYTE:
-                obj = in.readByte();
-
-                break;
-
-            case SHORT:
-                obj = in.readShort();
-
-                break;
-
-            case INT:
-                obj = in.readInt();
-
-                break;
-
-            case LONG:
-                obj = in.readLong();
-
-                break;
-
-            case FLOAT:
-                obj = in.readFloat();
-
-                break;
-
-            case DOUBLE:
-                obj = in.readDouble();
-
-                break;
-
-            case CHAR:
-                obj = in.readChar();
-
-                break;
-
-            case BOOLEAN:
-                obj = in.readBoolean();
-
-                break;
-
-            case DECIMAL:
-                obj = PortableUtils.doReadDecimal(in);
-
-                break;
-
-            case STRING:
-                obj = PortableUtils.doReadString(in);
-
-                break;
-
-            case UUID:
-                obj = PortableUtils.doReadUuid(in);
-
-                break;
-
-            case DATE:
-                obj = PortableUtils.doReadDate(in);
-
-                break;
-
-            case TIMESTAMP:
-                obj = PortableUtils.doReadTimestamp(in);
-
-                break;
-
-            case BYTE_ARR:
-                obj = PortableUtils.doReadByteArray(in);
-
-                break;
-
-            case SHORT_ARR:
-                obj = PortableUtils.doReadShortArray(in);
-
-                break;
-
-            case INT_ARR:
-                obj = PortableUtils.doReadIntArray(in);
-
-                break;
-
-            case LONG_ARR:
-                obj = PortableUtils.doReadLongArray(in);
-
-                break;
-
-            case FLOAT_ARR:
-                obj = PortableUtils.doReadFloatArray(in);
-
-                break;
-
-            case DOUBLE_ARR:
-                obj = PortableUtils.doReadDoubleArray(in);
-
-                break;
-
-            case CHAR_ARR:
-                obj = PortableUtils.doReadCharArray(in);
-
-                break;
-
-            case BOOLEAN_ARR:
-                obj = PortableUtils.doReadBooleanArray(in);
-
-                break;
-
-            case DECIMAL_ARR:
-                obj = PortableUtils.doReadDecimalArray(in);
-
-                break;
-
-            case STRING_ARR:
-                obj = PortableUtils.doReadStringArray(in);
-
-                break;
-
-            case UUID_ARR:
-                obj = PortableUtils.doReadUuidArray(in);
-
-                break;
-
-            case DATE_ARR:
-                obj = PortableUtils.doReadDateArray(in);
-
-                break;
-
-            case TIMESTAMP_ARR:
-                obj = PortableUtils.doReadTimestampArray(in);
-
-                break;
-
-            case OBJ_ARR:
-                obj = PortableUtils.doReadObjectArray(in, ctx, ldr, this, true);
-
-                break;
-
-            case COL:
-                obj = PortableUtils.doReadCollection(in, ctx, ldr, this, true, null);
-
-                break;
-
-            case MAP:
-                obj = PortableUtils.doReadMap(in, ctx, ldr, this, true, null);
-
-                break;
-
-            case PORTABLE_OBJ:
-                obj = PortableUtils.doReadPortableObject(in, ctx);
-
-                ((BinaryObjectImpl)obj).context(ctx);
-
-                if (!GridPortableMarshaller.KEEP_PORTABLES.get())
-                    obj = ((BinaryObject)obj).deserialize();
-
-                break;
-
-            case ENUM:
-                obj = PortableUtils.doReadEnum(in, PortableUtils.doReadClass(in, ctx, ldr));
-
-                break;
-
-            case ENUM_ARR:
-                obj = PortableUtils.doReadEnumArray(in, ctx, ldr, PortableUtils.doReadClass(in, ctx, ldr));
-
-                break;
-
-            case CLASS:
-                obj = PortableUtils.doReadClass(in, ctx, ldr);
-
-                break;
-
-            case OPTM_MARSH:
-                obj = PortableUtils.doReadOptimized(in, ctx, ldr);
-
-                break;
-
-            default:
-                throw new BinaryObjectException("Invalid flag value: " + flag);
-        }
-
-        return obj;
-    }
-
-    /**
-     * @return Deserialized object.
-     * @throws BinaryObjectException If failed.
-     */
-    @Nullable Object readField(int fieldId) throws BinaryObjectException {
-        if (!findFieldById(fieldId))
-            return null;
-
-        return new BinaryReaderExImpl(ctx, in, ldr, hnds).deserialize();
-    }
-
-    /**
-     * @param name Field name.
-     * @return Field offset.
-     */
-    private int fieldId(String name) {
-        assert name != null;
-
-        return idMapper.fieldId(typeId, name);
-    }
-
-    /**
-     * Get or create object schema.
-     *
-     * @return Schema.
-     */
-    public PortableSchema getOrCreateSchema() {
-        PortableSchema schema = ctx.schemaRegistry(typeId).schema(schemaId);
-
-        if (schema == null) {
-            if (fieldIdLen != PortableUtils.FIELD_ID_LEN) {
-                BinaryTypeImpl type = (BinaryTypeImpl)ctx.metadata(typeId);
-
-                if (type == null || type.metadata() == null)
-                    throw new BinaryObjectException("Cannot find metadata for object with compact footer: " +
-                        typeId);
-
-                for (PortableSchema typeSchema : type.metadata().schemas()) {
-                    if (schemaId == typeSchema.schemaId()) {
-                        schema = typeSchema;
-
-                        break;
-                    }
-                }
-
-                if (schema == null)
-                    throw new BinaryObjectException("Cannot find schema for object with compact footer [" +
-                        "typeId=" + typeId + ", schemaId=" + schemaId + ']');
-            }
-            else
-                schema = createSchema();
-
-            assert schema != null;
-
-            ctx.schemaRegistry(typeId).addSchema(schemaId, schema);
-        }
-
-        return schema;
-    }
-
-    /**
-     * Create schema.
-     *
-     * @return Schema.
-     */
-    private PortableSchema createSchema() {
-        assert fieldIdLen == PortableUtils.FIELD_ID_LEN;
-
-        PortableSchema.Builder builder = PortableSchema.Builder.newBuilder();
-
-        int searchPos = footerStart;
-        int searchEnd = searchPos + footerLen;
-
-        while (searchPos < searchEnd) {
-            int fieldId = in.readIntPositioned(searchPos);
-
-            builder.addField(fieldId);
-
-            searchPos += PortableUtils.FIELD_ID_LEN + fieldOffsetLen;
-        }
-
-        return builder.build();
-    }
-
-    /**
-     * Try finding the field by name.
-     *
-     * @param name Field name.
-     * @return Offset.
-     */
-    public boolean findFieldByName(String name) {
-        if (raw)
-            throw new BinaryObjectException("Failed to read named field because reader is in raw mode.");
-
-        assert dataStart != start;
-
-        if (footerLen == 0)
-            return false;
-
-        if (userType) {
-            int order;
-
-            if (matching) {
-                int expOrder = matchingOrder++;
-
-                PortableSchema.Confirmation confirm = schema.confirmOrder(expOrder, name);
-
-                switch (confirm) {
-                    case CONFIRMED:
-                        // The best case: got order without ID calculation and (ID -> order) lookup.
-                        if (expOrder == 0)
-                            // When we read the very first field, position is set to start, hence this re-positioning.
-                            streamPosition(dataStart);
-
-                        return true;
-
-                    case REJECTED:
-                        // Rejected, no more speculations are possible. Fallback to the slowest scenario.
-                        matching = false;
-
-                        order = schema.order(fieldId(name));
-
-                        break;
-
-                    default:
-                        // Field name is not know for this order. Need to calculate ID and repeat speculation.
-                        assert confirm == PortableSchema.Confirmation.CLARIFY;
-
-                        int id = fieldId(name);
-                        int realId = schema.fieldId(expOrder);
-
-                        if (id == realId) {
-                            // IDs matched, cache field name inside schema.
-                            schema.clarifyFieldName(expOrder, name);
-
-                            if (expOrder == 0)
-                                streamPosition(dataStart);
-
-                            return true;
-                        }
-                        else {
-                            // No match, stop further speculations.
-                            matching = false;
-
-                            order = schema.order(id);
-                        }
-
-                        break;
-                }
-            }
-            else
-                order = schema.order(fieldId(name));
-
-            return trySetUserFieldPosition(order);
-        }
-        else
-            return trySetSystemFieldPosition(fieldId(name));
-    }
-
-    /**
-     * Try finding the field by ID. Used for types with stable schema (Serializable) to avoid
-     * (string -> ID) calculations.
-     *
-     * @param id Field ID.
-     * @return {@code True} if field was found and stream was positioned accordingly.
-     */
-    private boolean findFieldById(int id) {
-        assert !raw; // Assert, not exception, because this is called only from internals for Serializable types.
-        assert dataStart != start;
-
-        if (footerLen == 0)
-            return false;
-
-        if (userType) {
-            int order;
-
-            if (matching) {
-                // Trying to get field order speculatively.
-                int expOrder = matchingOrder++;
-
-                int realId = schema.fieldId(expOrder);
-
-                if (realId == id) {
-                    if (expOrder == 0)
-                        streamPosition(dataStart);
-
-                    return true;
-                }
-                else {
-                    // Mismatch detected, no need for further speculations.
-                    matching = false;
-
-                    order = schema.order(id);
-                }
-            }
-            else
-                order = schema.order(id);
-
-            return trySetUserFieldPosition(order);
-        }
-        else
-            return trySetSystemFieldPosition(id);
-    }
-
-    /**
-     * Set position for the given user field order.
-     *
-     * @param order Order.
-     * @return {@code True} if field was found and stream was positioned accordingly.
-     */
-    private boolean trySetUserFieldPosition(int order) {
-        if (order != PortableSchema.ORDER_NOT_FOUND) {
-            int offsetPos = footerStart + order * (fieldIdLen + fieldOffsetLen) + fieldIdLen;
-
-            int pos = start + PortableUtils.fieldOffsetRelative(in, offsetPos, fieldOffsetLen);
-
-            streamPosition(pos);
-
-            return true;
-        }
-        else
-            return false;
-    }
-
-    /**
-     * Set position for the given system field ID.
-     *
-     * @param id Field ID.
-     * @return {@code True} if field was found and stream was positioned accordingly.
-     */
-    private boolean trySetSystemFieldPosition(int id) {
-        // System types are never written with compact footers because they do not have metadata.
-        assert fieldIdLen == PortableUtils.FIELD_ID_LEN;
-
-        int searchPos = footerStart;
-        int searchTail = searchPos + footerLen;
-
-        while (true) {
-            if (searchPos >= searchTail)
-                return false;
-
-            int id0 = in.readIntPositioned(searchPos);
-
-            if (id0 == id) {
-                int pos = start + PortableUtils.fieldOffsetRelative(in, searchPos + PortableUtils.FIELD_ID_LEN,
-                    fieldOffsetLen);
-
-                streamPosition(pos);
-
-                return true;
-            }
-
-            searchPos += PortableUtils.FIELD_ID_LEN + fieldOffsetLen;
-        }
-    }
-
-    /**
-     * Set stream position.
-     *
-     * @param pos Position.
-     */
-    private void streamPosition(int pos) {
-        in.position(pos);
-    }
-
-    /**
-     * Set stream position as a part of some random read. Further speculations will be disabled after this call.
-     *
-     * @param pos Position.
-     */
-    private void streamPositionRandom(int pos) {
-        streamPosition(pos);
-
-        matching = false;
-    }
-
-    /** {@inheritDoc} */
-    @Override public int readUnsignedByte() throws IOException {
-        return readByte() & 0xff;
-    }
-
-    /** {@inheritDoc} */
-    @Override public int readUnsignedShort() throws IOException {
-        return readShort() & 0xffff;
-    }
-
-    /** {@inheritDoc} */
-    @Override public String readLine() throws IOException {
-        SB sb = new SB();
-
-        int b;
-
-        while ((b = read()) >= 0) {
-            char c = (char)b;
-
-            switch (c) {
-                case '\n':
-                    return sb.toString();
-
-                case '\r':
-                    b = read();
-
-                    if (b < 0 || b == '\n')
-                        return sb.toString();
-                    else
-                        sb.a((char)b);
-
-                    break;
-
-                default:
-                    sb.a(c);
-            }
-        }
-
-        return sb.toString();
-    }
-
-    /** {@inheritDoc} */
-    @SuppressWarnings("ConstantConditions")
-    @NotNull @Override public String readUTF() throws IOException {
-        return readString();
-    }
-
-    /** {@inheritDoc} */
-    @SuppressWarnings("NullableProblems")
-    @Override public void readFully(byte[] b) throws IOException {
-        readFully(b, 0, b.length);
-    }
-
-    /** {@inheritDoc} */
-    @SuppressWarnings("NullableProblems")
-    @Override public void readFully(byte[] b, int off, int len) throws IOException {
-        int cnt = in.read(b, off, len);
-
-        if (cnt < len)
-            throw new EOFException();
-    }
-
-    /** {@inheritDoc} */
-    @Override public int skipBytes(int n) throws IOException {
-        int toSkip = Math.min(in.remaining(), n);
-
-        streamPositionRandom(in.position() + toSkip);
-
-        return toSkip;
-    }
-
-    /** {@inheritDoc} */
-    @Override public int read() throws IOException {
-        return readByte();
-    }
-
-    /** {@inheritDoc} */
-    @Override public int read(byte[] b) throws IOException {
-        return read(b, 0, b.length);
-    }
-
-    /** {@inheritDoc} */
-    @Override public int read(byte[] b, int off, int len) throws IOException {
-        return in.read(b, off, len);
-    }
-
-    /** {@inheritDoc} */
-    @Override public long skip(long n) throws IOException {
-        return skipBytes((int) n);
-    }
-
-    /** {@inheritDoc} */
-    @Override public int available() throws IOException {
-        return in.remaining();
-    }
-
-    /** {@inheritDoc} */
-    @Override public void close() throws IOException {
-        // No-op.
-    }
-
-    /**
-     * Flag.
-     */
-    private static enum Flag {
-        /** Regular. */
-        NORMAL,
-
-        /** Handle. */
-        HANDLE,
-
-        /** Null. */
-        NULL
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/1dbf20e0/modules/core/src/main/java/org/apache/ignite/internal/portable/BinaryReaderHandles.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/BinaryReaderHandles.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/BinaryReaderHandles.java
deleted file mode 100644
index 0024db0..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/portable/BinaryReaderHandles.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.portable;
-
-import org.jetbrains.annotations.Nullable;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Reader handles.
- */
-public class BinaryReaderHandles {
-    /** Mode: empty. */
-    private static final int MODE_EMPTY = 0;
-
-    /** Mode: single object. */
-    private static final int MODE_SINGLE = 1;
-
-    /** Mode: multiple objects. */
-    private static final int MODE_MULTIPLE = 2;
-
-    /** Position.  */
-    private int singlePos;
-
-    /** Data. This is either an object or a map. */
-    private Object data;
-
-    /** Mode. */
-    private int mode = MODE_EMPTY;
-
-    /**
-     * Get object by position.
-     *
-     * @param pos Position.
-     * @return Object.
-     */
-    @SuppressWarnings("unchecked")
-    public @Nullable <T> T get(int pos) {
-        switch (mode) {
-            case MODE_EMPTY:
-                return null;
-
-            case MODE_SINGLE:
-                return (T)data;
-
-            default:
-                assert mode == MODE_MULTIPLE;
-
-                return (T)((Map<Integer, Object>)data).get(pos);
-        }
-    }
-
-    /**
-     * Put object to registry and return previous position (if any).
-     *
-     * @param pos Position.
-     * @param obj Object.
-     */
-    @SuppressWarnings("unchecked")
-    public void put(int pos, Object obj) {
-        assert pos >= 0;
-        assert obj != null;
-
-        switch (mode) {
-            case MODE_EMPTY:
-                this.singlePos = pos;
-                this.data = obj;
-                this.mode = MODE_SINGLE;
-
-                break;
-
-            case MODE_SINGLE:
-                Map<Integer, Object> newData = new HashMap(3, 1.0f);
-
-                newData.put(singlePos, data);
-                newData.put(pos, obj);
-
-                this.singlePos = -1;
-                this.data = newData;
-                this.mode = MODE_MULTIPLE;
-
-                break;
-
-            default:
-                assert mode == MODE_MULTIPLE;
-
-                Map<Integer, Object> data0 = (Map<Integer, Object>)data;
-
-                data0.put(pos, obj);
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/1dbf20e0/modules/core/src/main/java/org/apache/ignite/internal/portable/BinaryReaderHandlesHolder.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/BinaryReaderHandlesHolder.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/BinaryReaderHandlesHolder.java
deleted file mode 100644
index 09a896c..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/portable/BinaryReaderHandlesHolder.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.portable;
-
-/**
- * Holder for handles.
- */
-public interface BinaryReaderHandlesHolder {
-    /**
-     * Set handle.
-     *
-     * @param obj Object.
-     * @param pos Position.
-     */
-    public void setHandle(Object obj, int pos);
-
-    /**
-     * Get handle.
-     *
-     * @param pos Position.
-     * @return Handle.
-     */
-    public Object getHandle(int pos);
-
-    /**
-     * Get all handles.
-     *
-     * @return Handles.
-     */
-    public BinaryReaderHandles handles();
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/1dbf20e0/modules/core/src/main/java/org/apache/ignite/internal/portable/BinaryReaderHandlesHolderImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/BinaryReaderHandlesHolderImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/BinaryReaderHandlesHolderImpl.java
deleted file mode 100644
index 1d40136..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/portable/BinaryReaderHandlesHolderImpl.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.portable;
-
-/**
- * Simple holder for handles.
- */
-public class BinaryReaderHandlesHolderImpl implements BinaryReaderHandlesHolder  {
-    /** Handles. */
-    private BinaryReaderHandles hnds;
-
-    /** {@inheritDoc} */
-    @Override public void setHandle(Object obj, int pos) {
-        handles().put(pos, obj);
-    }
-
-    /** {@inheritDoc} */
-    @Override public Object getHandle(int pos) {
-        return hnds != null ? hnds.get(pos) : null;
-    }
-
-    /** {@inheritDoc} */
-    @Override public BinaryReaderHandles handles() {
-        if (hnds == null)
-            hnds = new BinaryReaderHandles();
-
-        return hnds;
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/1dbf20e0/modules/core/src/main/java/org/apache/ignite/internal/portable/BinaryThreadLocalContext.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/BinaryThreadLocalContext.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/BinaryThreadLocalContext.java
deleted file mode 100644
index c6a7fc3..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/portable/BinaryThreadLocalContext.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.portable;
-
-import org.apache.ignite.internal.portable.streams.PortableMemoryAllocator;
-import org.apache.ignite.internal.portable.streams.PortableMemoryAllocatorChunk;
-
-/**
- * Contains thread-local data for binary marshalling.
- */
-public class BinaryThreadLocalContext {
-    /** Thread-local instance. */
-    private static final ThreadLocal<BinaryThreadLocalContext> CTX = new ThreadLocal<BinaryThreadLocalContext>() {
-        @Override protected BinaryThreadLocalContext initialValue() {
-            return new BinaryThreadLocalContext();
-        }
-    };
-
-    /** Memory chunk. */
-    private final PortableMemoryAllocatorChunk chunk = PortableMemoryAllocator.INSTANCE.chunk();
-
-    /** Schema holder. */
-    private final BinaryWriterSchemaHolder schema = new BinaryWriterSchemaHolder();
-
-    /**
-     * Get current context.
-     *
-     * @return Context.
-     */
-    public static BinaryThreadLocalContext get() {
-        return CTX.get();
-    }
-
-    /**
-     * Private constructor.
-     */
-    private BinaryThreadLocalContext() {
-        // No-op.
-    }
-
-    /**
-     * @return Memory chunk.
-     */
-    public PortableMemoryAllocatorChunk chunk() {
-        return chunk;
-    }
-
-    /**
-     * @return Schema holder.
-     */
-    public BinaryWriterSchemaHolder schemaHolder() {
-        return schema;
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/1dbf20e0/modules/core/src/main/java/org/apache/ignite/internal/portable/BinaryTypeImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/BinaryTypeImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/BinaryTypeImpl.java
deleted file mode 100644
index f471af2..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/portable/BinaryTypeImpl.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.portable;
-
-import org.apache.ignite.binary.BinaryType;
-
-import java.util.Collection;
-
-/**
- * Binary type implementation.
- */
-public class BinaryTypeImpl implements BinaryType {
-    /** Portable context. */
-    private final PortableContext ctx;
-
-    /** Type metadata. */
-    private final BinaryMetadata meta;
-
-    /**
-     * Constructor.
-     *
-     * @param ctx Portable context.
-     * @param meta Type  metadata.
-     */
-    public BinaryTypeImpl(PortableContext ctx, BinaryMetadata meta) {
-        this.ctx = ctx;
-        this.meta = meta;
-    }
-
-    /** {@inheritDoc} */
-    @Override public String typeName() {
-        return meta.typeName();
-    }
-
-    /** {@inheritDoc} */
-    @Override public int typeId() {
-        return meta.typeId();
-    }
-
-    /** {@inheritDoc} */
-    @Override public Collection<String> fieldNames() {
-        return meta.fields();
-    }
-
-    /** {@inheritDoc} */
-    @Override public String fieldTypeName(String fieldName) {
-        return meta.fieldTypeName(fieldName);
-    }
-
-    /** {@inheritDoc} */
-    @Override public BinaryFieldImpl field(String fieldName) {
-        return ctx.createField(meta.typeId(), fieldName);
-    }
-
-    /** {@inheritDoc} */
-    @Override public String affinityKeyFieldName() {
-        return meta.affinityKeyFieldName();
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean isEnum() {
-        return meta.isEnum();
-    }
-
-    /**
-     * @return Context.
-     */
-    public PortableContext context() {
-        return ctx;
-    }
-
-    /**
-     * @return Metadata.
-     */
-    public BinaryMetadata metadata() {
-        return meta;
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/1dbf20e0/modules/core/src/main/java/org/apache/ignite/internal/portable/BinaryWriteMode.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/BinaryWriteMode.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/BinaryWriteMode.java
deleted file mode 100644
index 3e0bf69..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/portable/BinaryWriteMode.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.portable;
-
-/**
- * Various write modes for binary objects.
- */
-public enum BinaryWriteMode {
-    /** Primitive byte. */
-    P_BYTE(GridPortableMarshaller.BYTE),
-
-    /** Primitive boolean. */
-    P_BOOLEAN(GridPortableMarshaller.BOOLEAN),
-
-    /** Primitive short. */
-    P_SHORT(GridPortableMarshaller.SHORT),
-
-    /** Primitive char. */
-    P_CHAR(GridPortableMarshaller.CHAR),
-
-    /** Primitive int. */
-    P_INT(GridPortableMarshaller.INT),
-
-    /** Primitive long. */
-    P_LONG(GridPortableMarshaller.LONG),
-
-    /** Primitive float. */
-    P_FLOAT(GridPortableMarshaller.FLOAT),
-
-    /** Primitive int. */
-    P_DOUBLE(GridPortableMarshaller.DOUBLE),
-
-    /** */
-    BYTE(GridPortableMarshaller.BYTE),
-
-    /** */
-    SHORT(GridPortableMarshaller.SHORT),
-
-    /** */
-    INT(GridPortableMarshaller.INT),
-
-    /** */
-    LONG(GridPortableMarshaller.LONG),
-
-    /** */
-    FLOAT(GridPortableMarshaller.FLOAT),
-
-    /** */
-    DOUBLE(GridPortableMarshaller.DOUBLE),
-
-    /** */
-    CHAR(GridPortableMarshaller.CHAR),
-
-    /** */
-    BOOLEAN(GridPortableMarshaller.BOOLEAN),
-
-    /** */
-    DECIMAL(GridPortableMarshaller.DECIMAL),
-
-    /** */
-    STRING(GridPortableMarshaller.STRING),
-
-    /** */
-    UUID(GridPortableMarshaller.UUID),
-
-    /** */
-    DATE(GridPortableMarshaller.DATE),
-
-    /** */
-    TIMESTAMP(GridPortableMarshaller.TIMESTAMP),
-
-    /** */
-    BYTE_ARR(GridPortableMarshaller.BYTE_ARR),
-
-    /** */
-    SHORT_ARR(GridPortableMarshaller.SHORT_ARR),
-
-    /** */
-    INT_ARR(GridPortableMarshaller.INT_ARR),
-
-    /** */
-    LONG_ARR(GridPortableMarshaller.LONG_ARR),
-
-    /** */
-    FLOAT_ARR(GridPortableMarshaller.FLOAT_ARR),
-
-    /** */
-    DOUBLE_ARR(GridPortableMarshaller.DOUBLE_ARR),
-
-    /** */
-    CHAR_ARR(GridPortableMarshaller.CHAR_ARR),
-
-    /** */
-    BOOLEAN_ARR(GridPortableMarshaller.BOOLEAN_ARR),
-
-    /** */
-    DECIMAL_ARR(GridPortableMarshaller.DECIMAL_ARR),
-
-    /** */
-    STRING_ARR(GridPortableMarshaller.STRING_ARR),
-
-    /** */
-    UUID_ARR(GridPortableMarshaller.UUID_ARR),
-
-    /** */
-    DATE_ARR(GridPortableMarshaller.DATE_ARR),
-
-    /** */
-    TIMESTAMP_ARR(GridPortableMarshaller.TIMESTAMP_ARR),
-
-    /** */
-    OBJECT_ARR(GridPortableMarshaller.OBJ_ARR),
-
-    /** */
-    COL(GridPortableMarshaller.COL),
-
-    /** */
-    MAP(GridPortableMarshaller.MAP),
-
-    /** */
-    PORTABLE_OBJ(GridPortableMarshaller.OBJ),
-
-    /** */
-    ENUM(GridPortableMarshaller.ENUM),
-
-    /** Portable enum. */
-    PORTABLE_ENUM(GridPortableMarshaller.ENUM),
-
-    /** */
-    ENUM_ARR(GridPortableMarshaller.ENUM_ARR),
-
-    /** */
-    CLASS(GridPortableMarshaller.CLASS),
-
-    /** */
-    PORTABLE(GridPortableMarshaller.PORTABLE_OBJ),
-
-    /** */
-    EXTERNALIZABLE(GridPortableMarshaller.OBJ),
-
-    /** */
-    OBJECT(GridPortableMarshaller.OBJ),
-
-    /** */
-    EXCLUSION(GridPortableMarshaller.OBJ);
-
-    /** Type ID. */
-    private final int typeId;
-
-    /**
-     * @param typeId Type ID.
-     */
-    private BinaryWriteMode(int typeId) {
-        this.typeId = typeId;
-    }
-
-    /**
-     * @return Type ID.
-     */
-    public int typeId() {
-        return typeId;
-    }
-}