You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by vo...@apache.org on 2015/11/11 10:14:46 UTC

[04/25] ignite git commit: IGNITE-1845: Adopted new binary API in .Net.

http://git-wip-us.apache.org/repos/asf/ignite/blob/894057e5/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Portable/PortableWriterImpl.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Portable/PortableWriterImpl.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Portable/PortableWriterImpl.cs
deleted file mode 100644
index ea3e368..0000000
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Portable/PortableWriterImpl.cs
+++ /dev/null
@@ -1,1421 +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.
- */
-
-namespace Apache.Ignite.Core.Impl.Portable
-{
-    using System;
-    using System.Collections;
-    using System.Collections.Generic;
-    using System.IO;
-    using Apache.Ignite.Core.Impl.Portable.IO;
-    using Apache.Ignite.Core.Impl.Portable.Metadata;
-    using Apache.Ignite.Core.Impl.Portable.Structure;
-    using Apache.Ignite.Core.Portable;
-
-    using PU = PortableUtils;
-
-    /// <summary>
-    /// Portable writer implementation.
-    /// </summary>
-    internal class PortableWriterImpl : IPortableWriter, IPortableRawWriter
-    {
-        /** Marshaller. */
-        private readonly PortableMarshaller _marsh;
-
-        /** Stream. */
-        private readonly IPortableStream _stream;
-
-        /** Builder (used only during build). */
-        private PortableBuilderImpl _builder;
-
-        /** Handles. */
-        private PortableHandleDictionary<object, long> _hnds;
-
-        /** Metadatas collected during this write session. */
-        private IDictionary<int, IPortableMetadata> _metas;
-
-        /** Current type ID. */
-        private int _curTypeId;
-
-        /** Current name converter */
-        private IPortableNameMapper _curConverter;
-
-        /** Current mapper. */
-        private IPortableIdMapper _curMapper;
-        
-        /** Current object start position. */
-        private int _curPos;
-
-        /** Current raw position. */
-        private int _curRawPos;
-
-        /** Whether we are currently detaching an object. */
-        private bool _detaching;
-
-        /** Current type structure tracker, */
-        private PortableStructureTracker _curStruct;
-
-        /** Schema holder. */
-        private readonly PortableObjectSchemaHolder _schema = PortableObjectSchemaHolder.Current;
-
-        /// <summary>
-        /// Gets the marshaller.
-        /// </summary>
-        internal PortableMarshaller Marshaller
-        {
-            get { return _marsh; }
-        }
-
-        /// <summary>
-        /// Write named boolean value.
-        /// </summary>
-        /// <param name="fieldName">Field name.</param>
-        /// <param name="val">Boolean value.</param>
-        public void WriteBoolean(string fieldName, bool val)
-        {
-            WriteFieldId(fieldName, PU.TypeBool);
-
-            _stream.WriteByte(PU.TypeBool);
-            _stream.WriteBool(val);
-        }
-        
-        /// <summary>
-        /// Write boolean value.
-        /// </summary>
-        /// <param name="val">Boolean value.</param>
-        public void WriteBoolean(bool val)
-        {
-            _stream.WriteBool(val);
-        }
-
-        /// <summary>
-        /// Write named boolean array.
-        /// </summary>
-        /// <param name="fieldName">Field name.</param>
-        /// <param name="val">Boolean array.</param>
-        public void WriteBooleanArray(string fieldName, bool[] val)
-        {
-            WriteFieldId(fieldName, PU.TypeArrayBool);
-
-            if (val == null)
-                WriteNullField();
-            else
-            {
-                _stream.WriteByte(PU.TypeArrayBool);
-                PU.WriteBooleanArray(val, _stream);
-            }
-        }
-
-        /// <summary>
-        /// Write boolean array.
-        /// </summary>
-        /// <param name="val">Boolean array.</param>
-        public void WriteBooleanArray(bool[] val)
-        {
-            if (val == null)
-                WriteNullRawField();
-            else
-            {
-                _stream.WriteByte(PU.TypeArrayBool);
-                PU.WriteBooleanArray(val, _stream);
-            }
-        }
-
-        /// <summary>
-        /// Write named byte value.
-        /// </summary>
-        /// <param name="fieldName">Field name.</param>
-        /// <param name="val">Byte value.</param>
-        public void WriteByte(string fieldName, byte val)
-        {
-            WriteFieldId(fieldName, PU.TypeBool);
-
-            _stream.WriteByte(PU.TypeByte);
-            _stream.WriteByte(val);
-        }
-
-        /// <summary>
-        /// Write byte value.
-        /// </summary>
-        /// <param name="val">Byte value.</param>
-        public void WriteByte(byte val)
-        {
-            _stream.WriteByte(val);
-        }
-
-        /// <summary>
-        /// Write named byte array.
-        /// </summary>
-        /// <param name="fieldName">Field name.</param>
-        /// <param name="val">Byte array.</param>
-        public void WriteByteArray(string fieldName, byte[] val)
-        {
-            WriteFieldId(fieldName, PU.TypeArrayByte);
-
-            if (val == null)
-                WriteNullField();
-            else
-            {
-                _stream.WriteByte(PU.TypeArrayByte);
-                PU.WriteByteArray(val, _stream);
-            }
-        }
-
-        /// <summary>
-        /// Write byte array.
-        /// </summary>
-        /// <param name="val">Byte array.</param>
-        public void WriteByteArray(byte[] val)
-        {
-            if (val == null)
-                WriteNullRawField();
-            else
-            {
-                _stream.WriteByte(PU.TypeArrayByte);
-                PU.WriteByteArray(val, _stream);
-            }
-        }
-
-        /// <summary>
-        /// Write named short value.
-        /// </summary>
-        /// <param name="fieldName">Field name.</param>
-        /// <param name="val">Short value.</param>
-        public void WriteShort(string fieldName, short val)
-        {
-            WriteFieldId(fieldName, PU.TypeShort);
-
-            _stream.WriteByte(PU.TypeShort);
-            _stream.WriteShort(val);
-        }
-
-        /// <summary>
-        /// Write short value.
-        /// </summary>
-        /// <param name="val">Short value.</param>
-        public void WriteShort(short val)
-        {
-            _stream.WriteShort(val);
-        }
-
-        /// <summary>
-        /// Write named short array.
-        /// </summary>
-        /// <param name="fieldName">Field name.</param>
-        /// <param name="val">Short array.</param>
-        public void WriteShortArray(string fieldName, short[] val)
-        {
-            WriteFieldId(fieldName, PU.TypeArrayShort);
-
-            if (val == null)
-                WriteNullField();
-            else
-            {
-                _stream.WriteByte(PU.TypeArrayShort);
-                PU.WriteShortArray(val, _stream);
-            }
-        }
-
-        /// <summary>
-        /// Write short array.
-        /// </summary>
-        /// <param name="val">Short array.</param>
-        public void WriteShortArray(short[] val)
-        {
-            if (val == null)
-                WriteNullRawField();
-            else
-            {
-                _stream.WriteByte(PU.TypeArrayShort);
-                PU.WriteShortArray(val, _stream);
-            }
-        }
-
-        /// <summary>
-        /// Write named char value.
-        /// </summary>
-        /// <param name="fieldName">Field name.</param>
-        /// <param name="val">Char value.</param>
-        public void WriteChar(string fieldName, char val)
-        {
-            WriteFieldId(fieldName, PU.TypeChar);
-
-            _stream.WriteByte(PU.TypeChar);
-            _stream.WriteChar(val);
-        }
-
-        /// <summary>
-        /// Write char value.
-        /// </summary>
-        /// <param name="val">Char value.</param>
-        public void WriteChar(char val)
-        {
-            _stream.WriteChar(val);
-        }
-
-        /// <summary>
-        /// Write named char array.
-        /// </summary>
-        /// <param name="fieldName">Field name.</param>
-        /// <param name="val">Char array.</param>
-        public void WriteCharArray(string fieldName, char[] val)
-        {
-            WriteFieldId(fieldName, PU.TypeArrayChar);
-
-            if (val == null)
-                WriteNullField();
-            else
-            {
-                _stream.WriteByte(PU.TypeArrayChar);
-                PU.WriteCharArray(val, _stream);
-            }
-        }
-
-        /// <summary>
-        /// Write char array.
-        /// </summary>
-        /// <param name="val">Char array.</param>
-        public void WriteCharArray(char[] val)
-        {
-            if (val == null)
-                WriteNullRawField();
-            else
-            {
-                _stream.WriteByte(PU.TypeArrayChar);
-                PU.WriteCharArray(val, _stream);
-            }
-        }
-
-        /// <summary>
-        /// Write named int value.
-        /// </summary>
-        /// <param name="fieldName">Field name.</param>
-        /// <param name="val">Int value.</param>
-        public void WriteInt(string fieldName, int val)
-        {
-            WriteFieldId(fieldName, PU.TypeInt);
-
-            _stream.WriteByte(PU.TypeInt);
-            _stream.WriteInt(val);
-        }
-
-        /// <summary>
-        /// Write int value.
-        /// </summary>
-        /// <param name="val">Int value.</param>
-        public void WriteInt(int val)
-        {
-            _stream.WriteInt(val);
-        }
-
-        /// <summary>
-        /// Write named int array.
-        /// </summary>
-        /// <param name="fieldName">Field name.</param>
-        /// <param name="val">Int array.</param>
-        public void WriteIntArray(string fieldName, int[] val)
-        {
-            WriteFieldId(fieldName, PU.TypeArrayInt);
-
-            if (val == null)
-                WriteNullField();
-            else
-            {
-                _stream.WriteByte(PU.TypeArrayInt);
-                PU.WriteIntArray(val, _stream);
-            }
-        }
-
-        /// <summary>
-        /// Write int array.
-        /// </summary>
-        /// <param name="val">Int array.</param>
-        public void WriteIntArray(int[] val)
-        {
-            if (val == null)
-                WriteNullRawField();
-            else
-            {
-                _stream.WriteByte(PU.TypeArrayInt);
-                PU.WriteIntArray(val, _stream);
-            }
-        }
-
-        /// <summary>
-        /// Write named long value.
-        /// </summary>
-        /// <param name="fieldName">Field name.</param>
-        /// <param name="val">Long value.</param>
-        public void WriteLong(string fieldName, long val)
-        {
-            WriteFieldId(fieldName, PU.TypeLong);
-
-            _stream.WriteByte(PU.TypeLong);
-            _stream.WriteLong(val);
-        }
-
-        /// <summary>
-        /// Write long value.
-        /// </summary>
-        /// <param name="val">Long value.</param>
-        public void WriteLong(long val)
-        {
-            _stream.WriteLong(val);
-        }
-
-        /// <summary>
-        /// Write named long array.
-        /// </summary>
-        /// <param name="fieldName">Field name.</param>
-        /// <param name="val">Long array.</param>
-        public void WriteLongArray(string fieldName, long[] val)
-        {
-            WriteFieldId(fieldName, PU.TypeArrayLong);
-
-            if (val == null)
-                WriteNullField();
-            else
-            {
-                _stream.WriteByte(PU.TypeArrayLong);
-                PU.WriteLongArray(val, _stream);
-            }
-        }
-
-        /// <summary>
-        /// Write long array.
-        /// </summary>
-        /// <param name="val">Long array.</param>
-        public void WriteLongArray(long[] val)
-        {
-            if (val == null)
-                WriteNullRawField();
-            else
-            {
-                _stream.WriteByte(PU.TypeArrayLong);
-                PU.WriteLongArray(val, _stream);
-            }
-        }
-
-        /// <summary>
-        /// Write named float value.
-        /// </summary>
-        /// <param name="fieldName">Field name.</param>
-        /// <param name="val">Float value.</param>
-        public void WriteFloat(string fieldName, float val)
-        {
-            WriteFieldId(fieldName, PU.TypeFloat);
-
-            _stream.WriteByte(PU.TypeFloat);
-            _stream.WriteFloat(val);
-        }
-
-        /// <summary>
-        /// Write float value.
-        /// </summary>
-        /// <param name="val">Float value.</param>
-        public void WriteFloat(float val)
-        {
-            _stream.WriteFloat(val);
-        }
-
-        /// <summary>
-        /// Write named float array.
-        /// </summary>
-        /// <param name="fieldName">Field name.</param>
-        /// <param name="val">Float array.</param>
-        public void WriteFloatArray(string fieldName, float[] val)
-        {
-            WriteFieldId(fieldName, PU.TypeArrayFloat);
-
-            if (val == null)
-                WriteNullField();
-            else
-            {
-                _stream.WriteByte(PU.TypeArrayFloat);
-                PU.WriteFloatArray(val, _stream);
-            }
-        }
-
-        /// <summary>
-        /// Write float array.
-        /// </summary>
-        /// <param name="val">Float array.</param>
-        public void WriteFloatArray(float[] val)
-        {
-            if (val == null)
-                WriteNullRawField();
-            else
-            {
-                _stream.WriteByte(PU.TypeArrayFloat);
-                PU.WriteFloatArray(val, _stream);
-            }
-        }
-
-        /// <summary>
-        /// Write named double value.
-        /// </summary>
-        /// <param name="fieldName">Field name.</param>
-        /// <param name="val">Double value.</param>
-        public void WriteDouble(string fieldName, double val)
-        {
-            WriteFieldId(fieldName, PU.TypeDouble);
-
-            _stream.WriteByte(PU.TypeDouble);
-            _stream.WriteDouble(val);
-        }
-
-        /// <summary>
-        /// Write double value.
-        /// </summary>
-        /// <param name="val">Double value.</param>
-        public void WriteDouble(double val)
-        {
-            _stream.WriteDouble(val);
-        }
-
-        /// <summary>
-        /// Write named double array.
-        /// </summary>
-        /// <param name="fieldName">Field name.</param>
-        /// <param name="val">Double array.</param>
-        public void WriteDoubleArray(string fieldName, double[] val)
-        {
-            WriteFieldId(fieldName, PU.TypeArrayDouble);
-
-            if (val == null)
-                WriteNullField();
-            else
-            {
-                _stream.WriteByte(PU.TypeArrayDouble);
-                PU.WriteDoubleArray(val, _stream);
-            }
-        }
-
-        /// <summary>
-        /// Write double array.
-        /// </summary>
-        /// <param name="val">Double array.</param>
-        public void WriteDoubleArray(double[] val)
-        {
-            if (val == null)
-                WriteNullRawField();
-            else
-            {
-                _stream.WriteByte(PU.TypeArrayDouble);
-                PU.WriteDoubleArray(val, _stream);
-            }
-        }
-
-        /// <summary>
-        /// Write named decimal value.
-        /// </summary>
-        /// <param name="fieldName">Field name.</param>
-        /// <param name="val">Decimal value.</param>
-        public void WriteDecimal(string fieldName, decimal? val)
-        {
-            WriteFieldId(fieldName, PU.TypeDecimal);
-
-            if (val == null)
-                WriteNullField();
-            else
-            {
-                _stream.WriteByte(PU.TypeDecimal);
-                PortableUtils.WriteDecimal(val.Value, _stream);
-            }
-        }
-
-        /// <summary>
-        /// Write decimal value.
-        /// </summary>
-        /// <param name="val">Decimal value.</param>
-        public void WriteDecimal(decimal? val)
-        {
-            if (val == null)
-                WriteNullRawField();
-            else
-            {
-                _stream.WriteByte(PU.TypeDecimal);
-                PortableUtils.WriteDecimal(val.Value, _stream);
-            }
-        }
-
-        /// <summary>
-        /// Write named decimal array.
-        /// </summary>
-        /// <param name="fieldName">Field name.</param>
-        /// <param name="val">Decimal array.</param>
-        public void WriteDecimalArray(string fieldName, decimal?[] val)
-        {
-            WriteFieldId(fieldName, PU.TypeArrayDecimal);
-
-            if (val == null)
-                WriteNullField();
-            else
-            {
-                _stream.WriteByte(PU.TypeArrayDecimal);
-                PU.WriteDecimalArray(val, _stream);
-            }
-        }
-        
-        /// <summary>
-        /// Write decimal array.
-        /// </summary>
-        /// <param name="val">Decimal array.</param>
-        public void WriteDecimalArray(decimal?[] val)
-        {
-            if (val == null)
-                WriteNullRawField();
-            else
-            {
-                _stream.WriteByte(PU.TypeArrayDecimal);
-                PU.WriteDecimalArray(val, _stream);
-            }
-        }
-
-        /// <summary>
-        /// Write named date value.
-        /// </summary>
-        /// <param name="fieldName">Field name.</param>
-        /// <param name="val">Date value.</param>
-        public void WriteTimestamp(string fieldName, DateTime? val)
-        {
-            WriteFieldId(fieldName, PU.TypeTimestamp);
-
-            if (val == null)
-                WriteNullField();
-            else
-            {
-                _stream.WriteByte(PortableUtils.TypeTimestamp);
-                PortableUtils.WriteTimestamp(val.Value, _stream);
-            }
-        }
-        
-        /// <summary>
-        /// Write date value.
-        /// </summary>
-        /// <param name="val">Date value.</param>
-        public void WriteTimestamp(DateTime? val)
-        {
-            if (val == null)
-                WriteNullRawField();
-            else
-            {
-                _stream.WriteByte(PortableUtils.TypeTimestamp);
-                PortableUtils.WriteTimestamp(val.Value, _stream);
-            }
-        }
-
-        /// <summary>
-        /// Write named date array.
-        /// </summary>
-        /// <param name="fieldName">Field name.</param>
-        /// <param name="val">Date array.</param>
-        public void WriteTimestampArray(string fieldName, DateTime?[] val)
-        {
-            WriteFieldId(fieldName, PU.TypeTimestamp);
-
-            if (val == null)
-                WriteNullField();
-            else
-            {
-                _stream.WriteByte(PortableUtils.TypeArrayTimestamp);
-                PortableUtils.WriteTimestampArray(val, _stream);
-            }
-        }
-
-        /// <summary>
-        /// Write date array.
-        /// </summary>
-        /// <param name="val">Date array.</param>
-        public void WriteTimestampArray(DateTime?[] val)
-        {
-            if (val == null)
-                WriteNullRawField();
-            else
-            {
-                _stream.WriteByte(PortableUtils.TypeArrayTimestamp);
-                PortableUtils.WriteTimestampArray(val, _stream);
-            }
-        }
-
-        /// <summary>
-        /// Write named string value.
-        /// </summary>
-        /// <param name="fieldName">Field name.</param>
-        /// <param name="val">String value.</param>
-        public void WriteString(string fieldName, string val)
-        {
-            WriteFieldId(fieldName, PU.TypeString);
-
-            if (val == null)
-                WriteNullField();
-            else
-            {
-                _stream.WriteByte(PU.TypeString);
-                PU.WriteString(val, _stream);
-            }
-        }
-
-        /// <summary>
-        /// Write string value.
-        /// </summary>
-        /// <param name="val">String value.</param>
-        public void WriteString(string val)
-        {
-            if (val == null)
-                WriteNullRawField();
-            else
-            {
-                _stream.WriteByte(PU.TypeString);
-                PU.WriteString(val, _stream);
-            }
-        }
-
-        /// <summary>
-        /// Write named string array.
-        /// </summary>
-        /// <param name="fieldName">Field name.</param>
-        /// <param name="val">String array.</param>
-        public void WriteStringArray(string fieldName, string[] val)
-        {
-            WriteFieldId(fieldName, PU.TypeArrayString);
-
-            if (val == null)
-                WriteNullField();
-            else
-            {
-                _stream.WriteByte(PU.TypeArrayString);
-                PU.WriteStringArray(val, _stream);
-            }
-        }
-
-        /// <summary>
-        /// Write string array.
-        /// </summary>
-        /// <param name="val">String array.</param>
-        public void WriteStringArray(string[] val)
-        {
-            if (val == null)
-                WriteNullRawField();
-            else
-            {
-                _stream.WriteByte(PU.TypeArrayString);
-                PU.WriteStringArray(val, _stream);
-            }
-        }
-
-        /// <summary>
-        /// Write named GUID value.
-        /// </summary>
-        /// <param name="fieldName">Field name.</param>
-        /// <param name="val">GUID value.</param>
-        public void WriteGuid(string fieldName, Guid? val)
-        {
-            WriteFieldId(fieldName, PU.TypeGuid);
-
-            if (val == null)
-                WriteNullField();
-            else
-            {
-                _stream.WriteByte(PU.TypeGuid);
-                PU.WriteGuid(val.Value, _stream);
-            }
-        }
-
-        /// <summary>
-        /// Write GUID value.
-        /// </summary>
-        /// <param name="val">GUID value.</param>
-        public void WriteGuid(Guid? val)
-        {
-            if (val == null)
-                WriteNullRawField();
-            else
-            {
-                _stream.WriteByte(PU.TypeGuid);
-                PU.WriteGuid(val.Value, _stream);
-            }
-        }
-
-        /// <summary>
-        /// Write named GUID array.
-        /// </summary>
-        /// <param name="fieldName">Field name.</param>
-        /// <param name="val">GUID array.</param>
-        public void WriteGuidArray(string fieldName, Guid?[] val)
-        {
-            WriteFieldId(fieldName, PU.TypeArrayGuid);
-
-            if (val == null)
-                WriteNullField();
-            else
-            {
-                _stream.WriteByte(PU.TypeArrayGuid);
-                PU.WriteGuidArray(val, _stream);
-            }
-        }
-
-        /// <summary>
-        /// Write GUID array.
-        /// </summary>
-        /// <param name="val">GUID array.</param>
-        public void WriteGuidArray(Guid?[] val)
-        {
-            if (val == null)
-                WriteNullRawField();
-            else
-            {
-                _stream.WriteByte(PU.TypeArrayGuid);
-                PU.WriteGuidArray(val, _stream);
-            }
-        }
-
-        /// <summary>
-        /// Write named enum value.
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="fieldName">Field name.</param>
-        /// <param name="val">Enum value.</param>
-        public void WriteEnum<T>(string fieldName, T val)
-        {
-            WriteFieldId(fieldName, PU.TypeEnum);
-
-            _stream.WriteByte(PU.TypeEnum);
-            PortableUtils.WriteEnum(_stream, (Enum)(object)val);
-        }
-
-        /// <summary>
-        /// Write enum value.
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="val">Enum value.</param>
-        public void WriteEnum<T>(T val)
-        {
-            _stream.WriteByte(PU.TypeEnum);
-            PortableUtils.WriteEnum(_stream, (Enum)(object)val);
-        }
-
-        /// <summary>
-        /// Write named enum array.
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="fieldName">Field name.</param>
-        /// <param name="val">Enum array.</param>
-        public void WriteEnumArray<T>(string fieldName, T[] val)
-        {
-            WriteFieldId(fieldName, PU.TypeArrayEnum);
-
-            if (val == null)
-                WriteNullField();
-            else
-            {
-                _stream.WriteByte(PU.TypeArrayEnum);
-                PortableUtils.WriteArray(val, this);
-            }
-        }
-
-        /// <summary>
-        /// Write enum array.
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="val">Enum array.</param>
-        public void WriteEnumArray<T>(T[] val)
-        {
-            if (val == null)
-                WriteNullRawField();
-            else
-            {
-                _stream.WriteByte(PU.TypeArrayEnum);
-                PortableUtils.WriteArray(val, this);
-            }
-        }
-
-        /// <summary>
-        /// Write named object value.
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="fieldName">Field name.</param>
-        /// <param name="val">Object value.</param>
-        public void WriteObject<T>(string fieldName, T val)
-        {
-            WriteFieldId(fieldName, PU.TypeObject);
-
-            if (val == null)
-                WriteNullField();
-            else
-                Write(val);
-        }
-
-        /// <summary>
-        /// Write object value.
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="val">Object value.</param>
-        public void WriteObject<T>(T val)
-        {
-            Write(val);
-        }
-
-        /// <summary>
-        /// Write named object array.
-        /// </summary>
-        /// <typeparam name="T">Element type.</typeparam>
-        /// <param name="fieldName">Field name.</param>
-        /// <param name="val">Object array.</param>
-        public void WriteArray<T>(string fieldName, T[] val)
-        {
-            WriteFieldId(fieldName, PU.TypeArray);
-
-            if (val == null)
-                WriteNullField();
-            else
-            {
-                _stream.WriteByte(PU.TypeArray);
-                PortableUtils.WriteArray(val, this);
-            }
-        }
-
-        /// <summary>
-        /// Write object array.
-        /// </summary>
-        /// <typeparam name="T">Element type.</typeparam>
-        /// <param name="val">Object array.</param>
-        public void WriteArray<T>(T[] val)
-        {
-            WriteArrayInternal(val);
-        }
-
-        /// <summary>
-        /// Write object array.
-        /// </summary>
-        /// <param name="val">Object array.</param>
-        public void WriteArrayInternal(Array val)
-        {
-            if (val == null)
-                WriteNullRawField();
-            else
-            {
-                _stream.WriteByte(PU.TypeArray);
-                PortableUtils.WriteArray(val, this);
-            }
-        }
-
-        /// <summary>
-        /// Write named collection.
-        /// </summary>
-        /// <param name="fieldName">Field name.</param>
-        /// <param name="val">Collection.</param>
-        public void WriteCollection(string fieldName, ICollection val)
-        {
-            WriteFieldId(fieldName, PU.TypeCollection);
-
-            if (val == null)
-                WriteNullField();
-            else
-                WriteCollection(val);
-        }
-
-        /// <summary>
-        /// Write collection.
-        /// </summary>
-        /// <param name="val">Collection.</param>
-        public void WriteCollection(ICollection val)
-        {
-            WriteByte(PU.TypeCollection);
-            PU.WriteCollection(val, this);
-        }
-
-        /// <summary>
-        /// Write named dictionary.
-        /// </summary>
-        /// <param name="fieldName">Field name.</param>
-        /// <param name="val">Dictionary.</param>
-        public void WriteDictionary(string fieldName, IDictionary val)
-        {
-            WriteFieldId(fieldName, PU.TypeDictionary);
-
-            if (val == null)
-                WriteNullField();
-            else
-                WriteDictionary(val);
-        }
-
-        /// <summary>
-        /// Write dictionary.
-        /// </summary>
-        /// <param name="val">Dictionary.</param>
-        public void WriteDictionary(IDictionary val)
-        {
-            WriteByte(PU.TypeDictionary);
-            PU.WriteDictionary(val, this);
-        }
-
-        /// <summary>
-        /// Write NULL field.
-        /// </summary>
-        private void WriteNullField()
-        {
-            _stream.WriteByte(PU.HdrNull);
-        }
-
-        /// <summary>
-        /// Write NULL raw field.
-        /// </summary>
-        private void WriteNullRawField()
-        {
-            _stream.WriteByte(PU.HdrNull);
-        }
-
-        /// <summary>
-        /// Get raw writer.
-        /// </summary>
-        /// <returns>
-        /// Raw writer.
-        /// </returns>
-        public IPortableRawWriter GetRawWriter()
-        {
-            if (_curRawPos == 0)
-                _curRawPos = _stream.Position;
-
-            return this;
-        }
-
-        /// <summary>
-        /// Set new builder.
-        /// </summary>
-        /// <param name="builder">Builder.</param>
-        /// <returns>Previous builder.</returns>
-        internal PortableBuilderImpl SetBuilder(PortableBuilderImpl builder)
-        {
-            PortableBuilderImpl ret = _builder;
-
-            _builder = builder;
-
-            return ret;
-        }
-
-        /// <summary>
-        /// Constructor.
-        /// </summary>
-        /// <param name="marsh">Marshaller.</param>
-        /// <param name="stream">Stream.</param>
-        internal PortableWriterImpl(PortableMarshaller marsh, IPortableStream stream)
-        {
-            _marsh = marsh;
-            _stream = stream;
-        }
-
-        /// <summary>
-        /// Write object.
-        /// </summary>
-        /// <param name="obj">Object.</param>
-        public void Write<T>(T obj)
-        {
-            // Handle special case for null.
-            if (obj == null)
-            {
-                _stream.WriteByte(PU.HdrNull);
-
-                return;
-            }
-
-            // We use GetType() of a real object instead of typeof(T) to take advantage of 
-            // automatic Nullable'1 unwrapping.
-            Type type = obj.GetType();
-
-            // Handle common case when primitive is written.
-            if (type.IsPrimitive)
-            {
-                WritePrimitive(obj, type);
-
-                return;
-            }
-
-            // Handle special case for builder.
-            if (WriteBuilderSpecials(obj))
-                return;
-
-            // Suppose that we faced normal object and perform descriptor lookup.
-            IPortableTypeDescriptor desc = _marsh.GetDescriptor(type);
-
-            if (desc != null)
-            {
-                // Writing normal object.
-                var pos = _stream.Position;
-
-                // Dealing with handles.
-                if (!(desc.Serializer is IPortableSystemTypeSerializer) && WriteHandle(pos, obj))
-                    return;
-
-                // Skip header length as not everything is known now
-                _stream.Seek(PortableObjectHeader.Size, SeekOrigin.Current);
-
-                // Preserve old frame.
-                int oldTypeId = _curTypeId;
-                IPortableNameMapper oldConverter = _curConverter;
-                IPortableIdMapper oldMapper = _curMapper;
-                int oldRawPos = _curRawPos;
-                var oldPos = _curPos;
-                
-                var oldStruct = _curStruct;
-
-                // Push new frame.
-                _curTypeId = desc.TypeId;
-                _curConverter = desc.NameMapper;
-                _curMapper = desc.IdMapper;
-                _curRawPos = 0;
-                _curPos = pos;
-
-                _curStruct = new PortableStructureTracker(desc, desc.WriterTypeStructure);
-                var schemaIdx = _schema.PushSchema();
-
-                try
-                {
-                    // Write object fields.
-                    desc.Serializer.WritePortable(obj, this);
-
-                    // Write schema
-                    var schemaOffset = _stream.Position - pos;
-
-                    int schemaId;
-                    short flags;
-                    var hasSchema = _schema.WriteSchema(_stream, schemaIdx, out schemaId, out flags);
-
-                    if (!hasSchema)
-                        schemaOffset = PortableObjectHeader.Size;
-
-                    // Calculate and write header.
-                    if (hasSchema && _curRawPos > 0)
-                        _stream.WriteInt(_curRawPos - pos); // raw offset is in the last 4 bytes
-
-                    var len = _stream.Position - pos;
-
-                    var header = new PortableObjectHeader(desc.UserType, desc.TypeId, obj.GetHashCode(), len,
-                        schemaId, schemaOffset, !hasSchema, flags);
-
-                    PortableObjectHeader.Write(header, _stream, pos);
-
-                    Stream.Seek(pos + len, SeekOrigin.Begin); // Seek to the end
-                }
-                finally
-                {
-                    _schema.PopSchema(schemaIdx);
-                }
-
-                // Apply structure updates if any.
-                _curStruct.UpdateWriterStructure(this);
-
-                // Restore old frame.
-                _curTypeId = oldTypeId;
-                _curConverter = oldConverter;
-                _curMapper = oldMapper;
-                _curRawPos = oldRawPos;
-                _curPos = oldPos;
-
-                _curStruct = oldStruct;
-            }
-            else
-            {
-                // Are we dealing with a well-known type?
-                var handler = PortableSystemHandlers.GetWriteHandler(type);
-
-                if (handler == null)  // We did our best, object cannot be marshalled.
-                    throw new PortableException("Unsupported object type [type=" + type + ", object=" + obj + ']');
-                
-                handler(this, obj);
-            }
-        }
-
-        /// <summary>
-        /// Write primitive type.
-        /// </summary>
-        /// <param name="val">Object.</param>
-        /// <param name="type">Type.</param>
-        private unsafe void WritePrimitive<T>(T val, Type type)
-        {
-            // .Net defines 14 primitive types. We support 12 - excluding IntPtr and UIntPtr.
-            // Types check sequence is designed to minimize comparisons for the most frequent types.
-
-            if (type == typeof(int))
-            {
-                _stream.WriteByte(PU.TypeInt);
-                _stream.WriteInt((int)(object)val);
-            }
-            else if (type == typeof(long))
-            {
-                _stream.WriteByte(PU.TypeLong);
-                _stream.WriteLong((long)(object)val);
-            }
-            else if (type == typeof(bool))
-            {
-                _stream.WriteByte(PU.TypeBool);
-                _stream.WriteBool((bool)(object)val);
-            }
-            else if (type == typeof(byte))
-            {
-                _stream.WriteByte(PU.TypeByte);
-                _stream.WriteByte((byte)(object)val);
-            }
-            else if (type == typeof(short))
-            {
-                _stream.WriteByte(PU.TypeShort);
-                _stream.WriteShort((short)(object)val);
-            }
-            else if (type == typeof (char))
-            {
-                _stream.WriteByte(PU.TypeChar);
-                _stream.WriteChar((char)(object)val);
-            }
-            else if (type == typeof(float))
-            {
-                _stream.WriteByte(PU.TypeFloat);
-                _stream.WriteFloat((float)(object)val);
-            }
-            else if (type == typeof(double))
-            {
-                _stream.WriteByte(PU.TypeDouble);
-                _stream.WriteDouble((double)(object)val);
-            }
-            else if (type == typeof(sbyte))
-            {
-                sbyte val0 = (sbyte)(object)val;
-
-                _stream.WriteByte(PU.TypeByte);
-                _stream.WriteByte(*(byte*)&val0);
-            }
-            else if (type == typeof(ushort))
-            {
-                ushort val0 = (ushort)(object)val;
-
-                _stream.WriteByte(PU.TypeShort);
-                _stream.WriteShort(*(short*)&val0);
-            }
-            else if (type == typeof(uint))
-            {
-                uint val0 = (uint)(object)val;
-
-                _stream.WriteByte(PU.TypeInt);
-                _stream.WriteInt(*(int*)&val0);
-            }
-            else if (type == typeof(ulong))
-            {
-                ulong val0 = (ulong)(object)val;
-
-                _stream.WriteByte(PU.TypeLong);
-                _stream.WriteLong(*(long*)&val0);
-            }
-            else
-                throw new PortableException("Unsupported object type [type=" + type.FullName + ", object=" + val + ']');
-        }
-
-        /// <summary>
-        /// Try writing object as special builder type.
-        /// </summary>
-        /// <param name="obj">Object.</param>
-        /// <returns>True if object was written, false otherwise.</returns>
-        private bool WriteBuilderSpecials<T>(T obj)
-        {
-            if (_builder != null)
-            {
-                // Special case for portable object during build.
-                PortableUserObject portObj = obj as PortableUserObject;
-
-                if (portObj != null)
-                {
-                    if (!WriteHandle(_stream.Position, portObj))
-                        _builder.ProcessPortable(_stream, portObj);
-
-                    return true;
-                }
-
-                // Special case for builder during build.
-                PortableBuilderImpl portBuilder = obj as PortableBuilderImpl;
-
-                if (portBuilder != null)
-                {
-                    if (!WriteHandle(_stream.Position, portBuilder))
-                        _builder.ProcessBuilder(_stream, portBuilder);
-
-                    return true;
-                }
-            }
-
-            return false;
-        }
-
-        /// <summary>
-        /// Add handle to handles map.
-        /// </summary>
-        /// <param name="pos">Position in stream.</param>
-        /// <param name="obj">Object.</param>
-        /// <returns><c>true</c> if object was written as handle.</returns>
-        private bool WriteHandle(long pos, object obj)
-        {
-            if (_hnds == null)
-            {
-                // Cache absolute handle position.
-                _hnds = new PortableHandleDictionary<object, long>(obj, pos);
-
-                return false;
-            }
-
-            long hndPos;
-
-            if (!_hnds.TryGetValue(obj, out hndPos))
-            {
-                // Cache absolute handle position.
-                _hnds.Add(obj, pos);
-
-                return false;
-            }
-
-            _stream.WriteByte(PU.HdrHnd);
-
-            // Handle is written as difference between position before header and handle position.
-            _stream.WriteInt((int)(pos - hndPos));
-
-            return true;
-        }
-
-        /// <summary>
-        /// Perform action with detached semantics.
-        /// </summary>
-        /// <param name="a"></param>
-        internal void WithDetach(Action<PortableWriterImpl> a)
-        {
-            if (_detaching)
-                a(this);
-            else
-            {
-                _detaching = true;
-
-                PortableHandleDictionary<object, long> oldHnds = _hnds;
-                _hnds = null;
-
-                try
-                {
-                    a(this);
-                }
-                finally
-                {
-                    _detaching = false;
-
-                    if (oldHnds != null)
-                    {
-                        // Merge newly recorded handles with old ones and restore old on the stack.
-                        // Otherwise we can use current handles right away.
-                        if (_hnds != null)
-                            oldHnds.Merge(_hnds);
-
-                        _hnds = oldHnds;
-                    }
-                }
-            }
-        }
-
-        /// <summary>
-        /// Stream.
-        /// </summary>
-        internal IPortableStream Stream
-        {
-            get { return _stream; }
-        }
-
-        /// <summary>
-        /// Gets collected metadatas.
-        /// </summary>
-        /// <returns>Collected metadatas (if any).</returns>
-        internal IDictionary<int, IPortableMetadata> Metadata()
-        {
-            return _metas;
-        }
-
-        /// <summary>
-        /// Check whether the given object is portable, i.e. it can be 
-        /// serialized with portable marshaller.
-        /// </summary>
-        /// <param name="obj">Object.</param>
-        /// <returns>True if portable.</returns>
-        internal bool IsPortable(object obj)
-        {
-            if (obj != null)
-            {
-                Type type = obj.GetType();
-
-                // We assume object as portable only in case it has descriptor.
-                // Collections, Enums and non-primitive arrays do not have descriptors
-                // and this is fine here because we cannot know whether their members
-                // are portable.
-                return _marsh.GetDescriptor(type) != null || PortableSystemHandlers.GetWriteHandler(type) != null;
-            }
-
-            return true;
-        }
-
-        /// <summary>
-        /// Write field ID.
-        /// </summary>
-        /// <param name="fieldName">Field name.</param>
-        /// <param name="fieldTypeId">Field type ID.</param>
-        private void WriteFieldId(string fieldName, byte fieldTypeId)
-        {
-            if (_curRawPos != 0)
-                throw new PortableException("Cannot write named fields after raw data is written.");
-
-            var fieldId = _curStruct.GetFieldId(fieldName, fieldTypeId);
-
-            _schema.PushField(fieldId, _stream.Position - _curPos);
-        }
-
-        /// <summary>
-        /// Saves metadata for this session.
-        /// </summary>
-        /// <param name="typeId">Type ID.</param>
-        /// <param name="typeName">Type name.</param>
-        /// <param name="affKeyFieldName">Affinity key field name.</param>
-        /// <param name="fields">Fields metadata.</param>
-        internal void SaveMetadata(int typeId, string typeName, string affKeyFieldName, IDictionary<string, int> fields)
-        {
-            if (_metas == null)
-            {
-                PortableMetadataImpl meta =
-                    new PortableMetadataImpl(typeId, typeName, fields, affKeyFieldName);
-
-                _metas = new Dictionary<int, IPortableMetadata>(1);
-
-                _metas[typeId] = meta;
-            }
-            else
-            {
-                IPortableMetadata meta;
-
-                if (_metas.TryGetValue(typeId, out meta))
-                {
-                    IDictionary<string, int> existingFields = ((PortableMetadataImpl)meta).FieldsMap();
-
-                    foreach (KeyValuePair<string, int> field in fields)
-                    {
-                        if (!existingFields.ContainsKey(field.Key))
-                            existingFields[field.Key] = field.Value;
-                    }
-                }
-                else
-                    _metas[typeId] = new PortableMetadataImpl(typeId, typeName, fields, affKeyFieldName);
-            }
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/894057e5/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Portable/PortablesImpl.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Portable/PortablesImpl.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Portable/PortablesImpl.cs
deleted file mode 100644
index e72ffac..0000000
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Portable/PortablesImpl.cs
+++ /dev/null
@@ -1,191 +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.
- */
-
-namespace Apache.Ignite.Core.Impl.Portable
-{
-    using System;
-    using System.Collections.Generic;
-    using System.IO;
-    using Apache.Ignite.Core.Common;
-    using Apache.Ignite.Core.Impl.Common;
-    using Apache.Ignite.Core.Impl.Portable.IO;
-    using Apache.Ignite.Core.Portable;
-
-    /// <summary>
-    /// Portables implementation.
-    /// </summary>
-    internal class PortablesImpl : IPortables
-    {
-        /** Owning grid. */
-        private readonly PortableMarshaller _marsh;
-
-        /// <summary>
-        /// Constructor.
-        /// </summary>
-        /// <param name="marsh">Marshaller.</param>
-        internal PortablesImpl(PortableMarshaller marsh)
-        {
-            _marsh = marsh;
-        }
-
-        /** <inheritDoc /> */
-        public T ToPortable<T>(object obj)
-        {
-            if (obj is IPortableObject)
-                return (T)obj;
-
-            IPortableStream stream = new PortableHeapStream(1024);
-
-            // Serialize.
-            PortableWriterImpl writer = _marsh.StartMarshal(stream);
-
-            try
-            {
-                writer.Write(obj);
-            }
-            finally
-            {
-                // Save metadata.
-                _marsh.FinishMarshal(writer);
-            }
-
-            // Deserialize.
-            stream.Seek(0, SeekOrigin.Begin);
-
-            return _marsh.Unmarshal<T>(stream, PortableMode.ForcePortable);
-        }
-
-        /** <inheritDoc /> */
-        public IPortableBuilder GetBuilder(Type type)
-        {
-            IgniteArgumentCheck.NotNull(type, "type");
-
-            IPortableTypeDescriptor desc = _marsh.GetDescriptor(type);
-
-            if (desc == null)
-                throw new IgniteException("Type is not portable (add it to PortableConfiguration): " + 
-                    type.FullName);
-
-            return Builder0(null, PortableFromDescriptor(desc), desc);
-        }
-
-        /** <inheritDoc /> */
-        public IPortableBuilder GetBuilder(string typeName)
-        {
-            IgniteArgumentCheck.NotNullOrEmpty(typeName, "typeName");
-
-            IPortableTypeDescriptor desc = _marsh.GetDescriptor(typeName);
-            
-            return Builder0(null, PortableFromDescriptor(desc), desc);
-        }
-
-        /** <inheritDoc /> */
-        public IPortableBuilder GetBuilder(IPortableObject obj)
-        {
-            IgniteArgumentCheck.NotNull(obj, "obj");
-
-            PortableUserObject obj0 = obj as PortableUserObject;
-
-            if (obj0 == null)
-                throw new ArgumentException("Unsupported object type: " + obj.GetType());
-
-            IPortableTypeDescriptor desc = _marsh.GetDescriptor(true, obj0.TypeId);
-            
-            return Builder0(null, obj0, desc);
-        }
-
-        /** <inheritDoc /> */
-        public int GetTypeId(string typeName)
-        {
-            IgniteArgumentCheck.NotNullOrEmpty(typeName, "typeName");
-
-            return Marshaller.GetDescriptor(typeName).TypeId;
-        }
-
-        /** <inheritDoc /> */
-        public ICollection<IPortableMetadata> GetMetadata()
-        {
-            return Marshaller.Ignite.ClusterGroup.Metadata();
-        }
-
-        /** <inheritDoc /> */
-        public IPortableMetadata GetMetadata(int typeId)
-        {
-            return Marshaller.GetMetadata(typeId);
-        }
-
-        /** <inheritDoc /> */
-        public IPortableMetadata GetMetadata(string typeName)
-        {
-            IgniteArgumentCheck.NotNullOrEmpty(typeName, "typeName");
-
-            return GetMetadata(GetTypeId(typeName));
-        }
-
-        /** <inheritDoc /> */
-        public IPortableMetadata GetMetadata(Type type)
-        {
-            IgniteArgumentCheck.NotNull(type, "type");
-
-            var desc = Marshaller.GetDescriptor(type);
-
-            return desc == null ? null : Marshaller.GetMetadata(desc.TypeId);
-        }
-
-        /// <summary>
-        /// Marshaller.
-        /// </summary>
-        internal PortableMarshaller Marshaller
-        {
-            get
-            {
-                return _marsh;
-            }
-        }
-
-        /// <summary>
-        /// Create empty portable object from descriptor.
-        /// </summary>
-        /// <param name="desc">Descriptor.</param>
-        /// <returns>Empty portable object.</returns>
-        private PortableUserObject PortableFromDescriptor(IPortableTypeDescriptor desc)
-        {
-            var len = PortableObjectHeader.Size;
-
-            var hdr = new PortableObjectHeader(desc.UserType, desc.TypeId, 0, len, 0, len, true, 0);
-
-            var stream = new PortableHeapStream(len);
-
-            PortableObjectHeader.Write(hdr, stream, 0);
-
-            return new PortableUserObject(_marsh, stream.InternalArray, 0, hdr);
-        }
-
-        /// <summary>
-        /// Internal builder creation routine.
-        /// </summary>
-        /// <param name="parent">Parent builder.</param>
-        /// <param name="obj">Portable object.</param>
-        /// <param name="desc">Type descriptor.</param>
-        /// <returns>Builder.</returns>
-        private PortableBuilderImpl Builder0(PortableBuilderImpl parent, PortableUserObject obj, 
-            IPortableTypeDescriptor desc)
-        {
-            return new PortableBuilderImpl(this, parent, obj, desc);
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/894057e5/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Portable/SerializableObjectHolder.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Portable/SerializableObjectHolder.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Portable/SerializableObjectHolder.cs
deleted file mode 100644
index a33ea24..0000000
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Portable/SerializableObjectHolder.cs
+++ /dev/null
@@ -1,73 +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.
- */
-
-namespace Apache.Ignite.Core.Impl.Portable
-{
-    using System.Diagnostics;
-    using System.Runtime.Serialization.Formatters.Binary;
-    using Apache.Ignite.Core.Impl.Portable.IO;
-    using Apache.Ignite.Core.Portable;
-
-    /// <summary>
-    /// Wraps Serializable item in a portable.
-    /// </summary>
-    internal class SerializableObjectHolder : IPortableWriteAware
-    {
-        /** */
-        private readonly object _item;
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="SerializableObjectHolder"/> class.
-        /// </summary>
-        /// <param name="item">The item to wrap.</param>
-        public SerializableObjectHolder(object item)
-        {
-            _item = item;
-        }
-
-        /// <summary>
-        /// Gets the item to wrap.
-        /// </summary>
-        public object Item
-        {
-            get { return _item; }
-        }
-
-        /** <inheritDoc /> */
-        public void WritePortable(IPortableWriter writer)
-        {
-            Debug.Assert(writer != null);
-
-            var writer0 = (PortableWriterImpl)writer.GetRawWriter();
-
-            writer0.WithDetach(w => new BinaryFormatter().Serialize(new PortableStreamAdapter(w.Stream), Item));
-        }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="SerializableObjectHolder"/> class.
-        /// </summary>
-        /// <param name="reader">The reader.</param>
-        public SerializableObjectHolder(IPortableReader reader)
-        {
-            Debug.Assert(reader != null);
-
-            var reader0 = (PortableReaderImpl) reader.GetRawReader();
-
-            _item = new BinaryFormatter().Deserialize(new PortableStreamAdapter(reader0.Stream), null);
-        }
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/894057e5/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Portable/Structure/PortableStructure.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Portable/Structure/PortableStructure.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Portable/Structure/PortableStructure.cs
deleted file mode 100644
index 5b97ef7..0000000
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Portable/Structure/PortableStructure.cs
+++ /dev/null
@@ -1,333 +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.
- */
-
-namespace Apache.Ignite.Core.Impl.Portable.Structure
-{
-    using System;
-    using System.Collections.Generic;
-    using System.Diagnostics;
-
-    using Apache.Ignite.Core.Portable;
-
-    /// <summary>
-    /// Portable type structure. Cache field IDs and metadata to improve marshalling performance.
-    /// Every object write contains a set of field writes. Every unique ordered set of written fields
-    /// produce write "path". We cache these paths allowing for very fast traverse over object structure
-    /// without expensive map lookups and field ID calculations. 
-    /// </summary>
-    internal class PortableStructure
-    {
-        /// <summary>
-        /// Create empty type structure.
-        /// </summary>
-        /// <returns>Empty type structure.</returns>
-        public static PortableStructure CreateEmpty()
-        {
-            return new PortableStructure(new[] { new PortableStructureEntry[0] }, 
-                new PortableStructureJumpTable[1], new Dictionary<string, byte>());
-        }
-
-        /** Entries. */
-        private readonly PortableStructureEntry[][] _paths;
-
-        /** Jumps. */
-        private readonly PortableStructureJumpTable[] _jumps;
-
-        /** Field types. */
-        private readonly IDictionary<string, byte> _fieldTypes;
-
-        /// <summary>
-        /// Constructor.
-        /// </summary>
-        /// <param name="paths">Paths.</param>
-        /// <param name="jumps">Jumps.</param>
-        /// <param name="fieldTypes">Field types.</param>
-        private PortableStructure(PortableStructureEntry[][] paths,
-            PortableStructureJumpTable[] jumps, IDictionary<string, byte> fieldTypes)
-        {
-            _paths = paths;
-            _jumps = jumps;
-            _fieldTypes = fieldTypes;
-        }
-
-        /// <summary>
-        /// Gets field ID if possible.
-        /// </summary>
-        /// <param name="fieldName">Field name.</param>
-        /// <param name="fieldType">Field type.</param>
-        /// <param name="pathIdx">Path index, changes during jumps.</param>
-        /// <param name="actionIdx">Action index.</param>
-        /// <returns>Field ID or zero in case there are no matching path.</returns>
-        public int GetFieldId(string fieldName, byte fieldType, ref int pathIdx, int actionIdx)
-        {
-            Debug.Assert(pathIdx <= _paths.Length);
-
-            // Get path.
-            PortableStructureEntry[] path = _paths[pathIdx];
-
-            if (actionIdx < path.Length)
-            {
-                // Get entry matching the action index.
-                PortableStructureEntry entry = path[actionIdx];
-
-                if (entry.IsExpected(fieldName, fieldType))
-                    // Entry matches our expectations, return.
-                    return entry.Id;
-                else if (entry.IsJumpTable)
-                {
-                    // Entry is a pointer to a jump table.
-                    Debug.Assert(entry.Id < _jumps.Length);
-
-                    PortableStructureJumpTable jmpTbl = _jumps[entry.Id];
-
-                    int pathIdx0 = jmpTbl.GetPathIndex(fieldName);
-
-                    if (pathIdx0 < 0)
-                        return 0;
-
-                    Debug.Assert(pathIdx0 < _paths.Length);
-
-                    entry = _paths[pathIdx0][actionIdx];
-
-                    entry.ValidateType(fieldType);
-
-                    pathIdx = pathIdx0;
-
-                    return entry.Id;
-                }
-            }
-
-            // Failed to find anything because this is a new field.
-            return 0;
-        }
-
-        /// <summary>
-        /// Merge updates into a new type structure.
-        /// </summary>
-        /// <param name="exp">Expected type structure to apply updates to </param>
-        /// <param name="pathIdx">Path index.</param>
-        /// <param name="updates">Updates.</param>
-        /// <returns>New type structure with updates.</returns>
-        public PortableStructure Merge(PortableStructure exp, int pathIdx, 
-            IList<PortableStructureUpdate> updates)
-        {
-            if (updates.Count == 0)
-                return this;
-
-            // Algorithm ensures that updates are applied to the same type structure,
-            // where they were initially observed. This allow us to keep structure
-            // internals simpler and more efficient. On the other hand, this imposes
-            // some performance hit because in case of concurrent update, recorded
-            // changes will be discarded and recorded again during the next write
-            // on the same path. This should occur only during application warmup.
-
-            // Note that field types are merged anyway to avoid metadata clashes.
-            PortableStructure res = MergeFieldTypes(updates);
-
-            if (ReferenceEquals(exp, this))
-            {
-                PortableStructureUpdate firstUpdate = updates[0];
-
-                if (firstUpdate.Index == 0)
-                {
-                    // Special case: the very first structure update. Simply attach all updates.
-                    Debug.Assert(_paths.Length == 1);
-                    Debug.Assert(_paths[0].Length == 0);
-                    Debug.Assert(pathIdx == 0);
-
-                    var newPaths = CopyPaths(updates.Count, 0);
-
-                    ApplyUpdatesToPath(newPaths[0], updates);
-
-                    res = new PortableStructure(newPaths, _jumps, res._fieldTypes);
-                }
-                else
-                {
-                    // Get entry where updates should start.
-                    PortableStructureEntry[] path = _paths[pathIdx];
-
-                    PortableStructureEntry startEntry = default(PortableStructureEntry);
-
-                    if (firstUpdate.Index < path.Length)
-                        startEntry = path[firstUpdate.Index];
-
-                    if (startEntry.IsEmpty)
-                    {
-                        // We are on the empty/non-existent entry. Continue the path without branching.
-                        var newPaths = CopyPaths(firstUpdate.Index + updates.Count, 0);
-
-                        ApplyUpdatesToPath(newPaths[pathIdx], updates);
-
-                        res = new PortableStructure(newPaths, _jumps, res._fieldTypes);
-                    }
-                    else if (startEntry.IsJumpTable)
-                    {
-                        // We are on the jump table. Add a new path and record it in the jump table.
-
-                        // 1. Prepare new structures.
-                        var newPaths = CopyPaths(firstUpdate.Index + updates.Count, 1);
-                        var newJumps = CopyJumps(0);
-
-                        // New path will be the last one.
-                        int newPathIdx = newPaths.Length - 1;
-
-                        // Apply updates to the new path.
-                        ApplyUpdatesToPath(newPaths[newPathIdx], updates);
-
-                        // Add the jump to the table.
-                        newJumps[startEntry.Id] = 
-                            newJumps[startEntry.Id].CopyAndAdd(firstUpdate.FieldName, newPathIdx);
-
-                        res = new PortableStructure(newPaths, newJumps, res._fieldTypes);
-                    }
-                    else
-                    {
-                        // We are on existing entry. Need to create a new jump table here and two new paths.
-
-                        // 1. Prepaare new structures.
-                        var newPaths = CopyPaths(firstUpdate.Index + updates.Count, 2);
-                        var newJumps = CopyJumps(1);
-
-                        // Old path will be moved here.
-                        int oldPathIdx = newPaths.Length - 2;
-
-                        // New path will reside here.
-                        int newPathIdx = newPaths.Length - 1;
-
-                        // Create new jump table.
-                        int newJumpIdx = newJumps.Length - 1;
-
-                        newJumps[newJumpIdx] = new PortableStructureJumpTable(startEntry.Name, oldPathIdx,
-                            firstUpdate.FieldName, newPathIdx);
-
-                        // Re-create old path in two steps: move old path to the new place, then clean the old path.
-                        for (int i = firstUpdate.Index; i < path.Length; i++)
-                        {
-                            newPaths[oldPathIdx][i] = newPaths[pathIdx][i];
-
-                            if (i == firstUpdate.Index)
-                                // Inject jump table ...
-                                newPaths[pathIdx][i] = new PortableStructureEntry(newJumpIdx);
-                            else
-                                // ... or just reset.
-                                newPaths[pathIdx][i] = new PortableStructureEntry();
-                        }
-
-                        // Apply updates to the new path.
-                        ApplyUpdatesToPath(newPaths[newPaths.Length - 1], updates);
-
-                        res = new PortableStructure(newPaths, newJumps, res._fieldTypes);
-                    }
-
-                }
-            }
-
-            return res;
-        }
-
-        /// <summary>
-        /// Copy and possibly expand paths.
-        /// </summary>
-        /// <param name="minLen">Minimum length.</param>
-        /// <param name="additionalPaths">Amount of additional paths required.</param>
-        /// <returns>Result.</returns>
-        private PortableStructureEntry[][] CopyPaths(int minLen, int additionalPaths)
-        {
-            var newPaths = new PortableStructureEntry[_paths.Length + additionalPaths][];
-
-            int newPathLen = Math.Max(_paths[0].Length, minLen);
-
-            for (int i = 0; i < newPaths.Length; i++)
-            {
-                newPaths[i] = new PortableStructureEntry[newPathLen];
-
-                if (i < _paths.Length)
-                    Array.Copy(_paths[i], newPaths[i], _paths[i].Length);
-            }
-
-            return newPaths;
-        }
-
-        /// <summary>
-        /// Copy and possibly expand jump tables.
-        /// </summary>
-        /// <param name="additionalJumps">Amount of additional jumps required.</param>
-        /// <returns>Result.</returns>
-        private PortableStructureJumpTable[] CopyJumps(int additionalJumps)
-        {
-            var newJumps = new PortableStructureJumpTable[_jumps.Length + additionalJumps];
-
-            // The very first jump is always null so that we can distinguish between jump table
-            // and empty value in PortableStructureEntry.
-            for (int i = 1; i < _jumps.Length; i++)
-                newJumps[i] = _jumps[i].Copy();
-
-            return newJumps;
-        }
-
-        /// <summary>
-        /// Apply updates to path.
-        /// </summary>
-        /// <param name="path">Path.</param>
-        /// <param name="updates">Updates.</param>
-        private static void ApplyUpdatesToPath(IList<PortableStructureEntry> path,
-            IEnumerable<PortableStructureUpdate> updates)
-        {
-            foreach (var u in updates)
-                path[u.Index] = new PortableStructureEntry(u.FieldName, u.FieldId, u.FieldType);
-        }
-
-        /// <summary>
-        /// Merge field types.
-        /// </summary>
-        /// <param name="updates">Updates.</param>
-        /// <returns>Type structure with applied updates.</returns>
-        private PortableStructure MergeFieldTypes(IList<PortableStructureUpdate> updates)
-        {
-            IDictionary<string, byte> newFieldTypes = new Dictionary<string, byte>(_fieldTypes);
-
-            foreach (PortableStructureUpdate update in updates)
-            {
-                byte expType;
-
-                if (_fieldTypes.TryGetValue(update.FieldName, out expType))
-                {
-                    // This is an old field.
-                    if (expType != update.FieldType)
-                    {
-                        throw new PortableException("Field type mismatch detected [fieldName=" + update.FieldName +
-                            ", expectedType=" + expType + ", actualType=" + update.FieldType + ']');
-                    }
-                }
-                else
-                    // This is a new field.
-                    newFieldTypes[update.FieldName] = update.FieldType;
-            }
-
-            return newFieldTypes.Count == _fieldTypes.Count ?
-                this : new PortableStructure(_paths, _jumps, newFieldTypes);
-        }
-
-        /// <summary>
-        /// Recorded field types.
-        /// </summary>
-        internal IDictionary<string, byte> FieldTypes
-        {
-            get { return _fieldTypes; }
-        } 
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/894057e5/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Portable/Structure/PortableStructureEntry.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Portable/Structure/PortableStructureEntry.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Portable/Structure/PortableStructureEntry.cs
deleted file mode 100644
index 9b6d282..0000000
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Portable/Structure/PortableStructureEntry.cs
+++ /dev/null
@@ -1,129 +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.
- */
-
-namespace Apache.Ignite.Core.Impl.Portable.Structure
-{
-    using System.Diagnostics;
-
-    using Apache.Ignite.Core.Portable;
-
-    /// <summary>
-    /// Portable type structure entry. Might be either a normal field, a reference to jump table, or an empty entry.
-    /// </summary>
-    internal struct PortableStructureEntry
-    {
-        /** Field name. */
-        private readonly string _name;
-
-        /** Field ID. */
-        private readonly int _id;
-
-        /** Field type. */
-        private readonly byte _type;
-
-        /// <summary>
-        /// Constructor for jump table entry.
-        /// </summary>
-        /// <param name="jumpTblIdx">Jump table index.</param>
-        public PortableStructureEntry(int jumpTblIdx)
-        {
-            Debug.Assert(jumpTblIdx > 0);
-
-            _name = null;
-            _id = jumpTblIdx;
-            _type = 0;
-        }
-
-        /// <summary>
-        /// Constructor for field entry.
-        /// </summary>
-        /// <param name="name">Field name.</param>
-        /// <param name="id">Field ID.</param>
-        /// <param name="type">Field type.</param>
-        public PortableStructureEntry(string name, int id, byte type)
-        {
-            Debug.Assert(name != null);
-
-            _name = name;
-            _id = id;
-            _type = type;
-        }
-
-        /// <summary>
-        /// Check whether current field entry matches passed arguments.
-        /// </summary>
-        /// <param name="name">Field name.</param>
-        /// <param name="type">Field type.</param>
-        /// <returns>True if expected.</returns>
-        public bool IsExpected(string name, byte type)
-        {
-            // Perform reference equality check first because field name is a literal in most cases.
-            if (!ReferenceEquals(_name, name) && !name.Equals(_name))
-                return false;
-
-            ValidateType(type);
-
-            return true;
-        }
-
-        /// <summary>
-        /// Validate field type.
-        /// </summary>
-        /// <param name="type">Expected type.</param>
-        public void ValidateType(byte type)
-        {
-            if (_type != type)
-            {
-                throw new PortableException("Field type mismatch detected [fieldName=" + _name +
-                    ", expectedType=" + _type + ", actualType=" + type + ']');
-            }
-        }
-
-        /// <summary>
-        /// Whether this is an empty entry.
-        /// </summary>
-        /// <returns></returns>
-        public bool IsEmpty
-        {
-            get { return _id == 0; }
-        }
-
-        /// <summary>
-        /// Whether this is a jump table.
-        /// </summary>
-        public bool IsJumpTable
-        {
-            get { return _name == null && _id >= 0; }
-        }
-
-        /// <summary>
-        /// Field name.
-        /// </summary>
-        public string Name
-        {
-            get { return _name; }
-        }
-
-        /// <summary>
-        /// Field ID.
-        /// </summary>
-        public int Id
-        {
-            get { return _id; }
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/894057e5/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Portable/Structure/PortableStructureJumpTable.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Portable/Structure/PortableStructureJumpTable.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Portable/Structure/PortableStructureJumpTable.cs
deleted file mode 100644
index 7f8b373..0000000
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Portable/Structure/PortableStructureJumpTable.cs
+++ /dev/null
@@ -1,118 +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.
- */
-
-namespace Apache.Ignite.Core.Impl.Portable.Structure
-{
-    using System;
-    using System.Diagnostics;
-
-    /// <summary>
-    /// Jump table.
-    /// </summary>
-    internal class PortableStructureJumpTable
-    {
-        /** Names. */
-        private readonly string[] _names;
-
-        /** Path indexes. */
-        private readonly int[] _pathIdxs;
-
-        /// <summary>
-        /// Create minimal jump table with two entries.
-        /// </summary>
-        /// <param name="firstName">First name.</param>
-        /// <param name="firstPathIdx">First path index.</param>
-        /// <param name="secondName">Second name.</param>
-        /// <param name="secondPathIdx">Second path index.</param>
-        public PortableStructureJumpTable(string firstName, int firstPathIdx, 
-            string secondName, int secondPathIdx)
-        {
-            _names = new[] { firstName, secondName };
-            _pathIdxs = new[] { firstPathIdx, secondPathIdx };
-        }
-
-        /// <summary>
-        /// Constructor.
-        /// </summary>
-        /// <param name="names">Field names.</param>
-        /// <param name="pathIdxs">Path indexes.</param>
-        private PortableStructureJumpTable(string[] names, int[] pathIdxs)
-        {
-            Debug.Assert(names.Length > 1);
-            Debug.Assert(names.Length == pathIdxs.Length);
-            
-            _names = names;
-            _pathIdxs = pathIdxs;
-        }
-
-        /// <summary>
-        /// Get path index for the given field.
-        /// </summary>
-        /// <param name="fieldName">Field name.</param>
-        /// <returns>Path index.</returns>
-        public int GetPathIndex(string fieldName)
-        {
-            Debug.Assert(fieldName != null);
-            
-            // Optimistically assume that field name is a literal.
-            for (var i = 0; i < _names.Length; i++)
-            {
-                if (ReferenceEquals(fieldName, _names[i]))
-                    return _pathIdxs[i];
-            }
-
-            // Fallback to slow-path with normal string comparison.
-            for (var i = 0; i < _names.Length; i++)
-            {
-                if (fieldName.Equals(_names[i]))
-                    return _pathIdxs[i];
-            }
-
-            // No path found for the field.
-            return -1;
-        }
-
-        /// <summary>
-        /// Copy jump table.
-        /// </summary>
-        /// <returns>New jump table.</returns>
-        public PortableStructureJumpTable Copy()
-        {
-            return new PortableStructureJumpTable(_names, _pathIdxs);
-        }
-
-        /// <summary>
-        /// Copy jump table with additional jump.
-        /// </summary>
-        /// <param name="name">Field name.</param>
-        /// <param name="pathIdx">Path index.</param>
-        /// <returns>New jump table.</returns>
-        public PortableStructureJumpTable CopyAndAdd(string name, int pathIdx)
-        {
-            var newNames = new string[_names.Length + 1];
-            var newPathIdxs = new int[_pathIdxs.Length + 1];
-
-            Array.Copy(_names, newNames, _names.Length);
-            Array.Copy(_pathIdxs, newPathIdxs, _pathIdxs.Length);
-
-            newNames[newNames.Length - 1] = name;
-            newPathIdxs[newPathIdxs.Length - 1] = pathIdx;
-
-            return new PortableStructureJumpTable(newNames, newPathIdxs);
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/894057e5/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Portable/Structure/PortableStructureTracker.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Portable/Structure/PortableStructureTracker.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Portable/Structure/PortableStructureTracker.cs
deleted file mode 100644
index 11ba032..0000000
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Portable/Structure/PortableStructureTracker.cs
+++ /dev/null
@@ -1,140 +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.
- */
-
-namespace Apache.Ignite.Core.Impl.Portable.Structure
-{
-    using System.Collections.Generic;
-
-    /// <summary>
-    /// Encapsulates logic for tracking field access and updating type descriptor structure.
-    /// </summary>
-    internal struct PortableStructureTracker
-    {
-        /** Current type structure. */
-        private readonly IPortableTypeDescriptor _desc;
-
-        /** Struct. */
-        private readonly PortableStructure _portStruct;
-
-        /** Current type structure path index. */
-        private int _curStructPath;
-
-        /** Current type structure action index. */
-        private int _curStructAction;
-
-        /** Current type structure updates. */
-        private List<PortableStructureUpdate> _curStructUpdates;
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="PortableStructureTracker" /> class.
-        /// </summary>
-        /// <param name="desc">The desc.</param>
-        /// <param name="portStruct">The structure to work with.</param>
-        public PortableStructureTracker(IPortableTypeDescriptor desc, PortableStructure portStruct)
-        {
-            _desc = desc;
-            _portStruct = portStruct;
-            _curStructPath = 0;
-            _curStructAction = 0;
-            _curStructUpdates = null;
-        }
-
-        /// <summary>
-        /// Gets the current structure action.
-        /// </summary>
-        public int CurStructAction
-        {
-            get { return _curStructAction; }
-        }
-
-        /// <summary>
-        /// Gets the field ID.
-        /// </summary>
-        public int GetFieldId(string fieldName, byte fieldTypeId = 0)
-        {
-            _curStructAction++;
-
-            if (_curStructUpdates == null)
-            {
-                var fieldId = _portStruct.GetFieldId(fieldName, fieldTypeId, ref _curStructPath,
-                    _curStructAction);
-
-                if (fieldId != 0)
-                    return fieldId;
-            }
-
-            return GetNewFieldId(fieldName, fieldTypeId, _curStructAction);
-        }
-
-        /// <summary>
-        /// Updates the type structure.
-        /// </summary>
-        public void UpdateReaderStructure()
-        {
-            if (_curStructUpdates != null)
-                _desc.UpdateReadStructure(_desc.ReaderTypeStructure, _curStructPath, _curStructUpdates);
-        }
-
-        /// <summary>
-        /// Updates the type structure and metadata for the specified writer.
-        /// </summary>
-        /// <param name="writer">The writer.</param>
-        public void UpdateWriterStructure(PortableWriterImpl writer)
-        {
-            if (_curStructUpdates != null)
-            {
-                _desc.UpdateWriteStructure(_desc.WriterTypeStructure, _curStructPath, _curStructUpdates);
-
-                var marsh = writer.Marshaller;
-
-                var metaHnd = marsh.GetMetadataHandler(_desc);
-
-                if (metaHnd != null)
-                {
-                    foreach (var u in _curStructUpdates)
-                        metaHnd.OnFieldWrite(u.FieldId, u.FieldName, u.FieldType);
-
-                    var meta = metaHnd.OnObjectWriteFinished();
-
-                    if (meta != null)
-                        writer.SaveMetadata(_desc.TypeId, _desc.TypeName, _desc.AffinityKeyFieldName, meta);
-                }
-            }
-        }
-
-        /// <summary>
-        /// Get ID for the new field and save structure update.
-        /// </summary>
-        /// <param name="fieldName">Field name.</param>
-        /// <param name="fieldTypeId">Field type ID.</param>
-        /// <param name="action">Action index.</param>
-        /// <returns>
-        /// Field ID.
-        /// </returns>
-        private int GetNewFieldId(string fieldName, byte fieldTypeId, int action)
-        {
-            var fieldId = PortableUtils.FieldId(_desc.TypeId, fieldName, _desc.NameMapper, _desc.IdMapper);
-
-            if (_curStructUpdates == null)
-                _curStructUpdates = new List<PortableStructureUpdate>();
-
-            _curStructUpdates.Add(new PortableStructureUpdate(fieldName, fieldId, fieldTypeId, action));
-
-            return fieldId;
-        }
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/894057e5/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Portable/Structure/PortableStructureUpdate.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Portable/Structure/PortableStructureUpdate.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Portable/Structure/PortableStructureUpdate.cs
deleted file mode 100644
index fa239db..0000000
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Portable/Structure/PortableStructureUpdate.cs
+++ /dev/null
@@ -1,84 +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.
- */
-
-namespace Apache.Ignite.Core.Impl.Portable.Structure
-{
-    /// <summary>
-    /// Portable type structure update descriptor.
-    /// </summary>
-    internal class PortableStructureUpdate
-    {
-        /** Field name. */
-        private readonly string _fieldName;
-
-        /** Field ID. */
-        private readonly int _fieldId;
-
-        /** Field type. */
-        private readonly byte _fieldType;
-
-        /** Field index. */
-        private readonly int _idx;
-
-        /// <summary>
-        /// Constructor.
-        /// </summary>
-        /// <param name="fieldName">Field name.</param>
-        /// <param name="fieldId">Field ID.</param>
-        /// <param name="fieldType">Field type.</param>
-        /// <param name="idx">Index.</param>
-        public PortableStructureUpdate(string fieldName, int fieldId, byte fieldType, int idx)
-        {
-            _fieldName = fieldName;
-            _fieldId = fieldId;
-            _fieldType = fieldType;
-            _idx = idx;
-        }
-
-        /// <summary>
-        /// Field name.
-        /// </summary>
-        public string FieldName
-        {
-            get { return _fieldName; }
-        }
-
-        /// <summary>
-        /// Field ID.
-        /// </summary>
-        public int FieldId
-        {
-            get { return _fieldId; }
-        }
-
-        /// <summary>
-        /// Field type.
-        /// </summary>
-        public byte FieldType
-        {
-            get { return _fieldType; }
-        }
-
-        /// <summary>
-        /// Index.
-        /// </summary>
-        public int Index
-        {
-            get { return _idx; }
-        }
-    }
-}