Esempio n. 1
0
        public override T[] Deserialize(ref byte[] bytes, int offset, DirtyTracker tracker, out int byteSize)
        {
            tracker.Dirty(); // can not track so mark as dirty.

            var length = BinaryUtil.ReadInt32(ref bytes, offset);

            if (length == -1)
            {
                byteSize = 4;
                return(null);
            }

            var startOffset = offset;

            offset += 4;
            int size;

            BinaryUtil.ValidateNewSize(length); // size is not strict(Marshal.SizeOf<T>()) but okay to use.
            var result = new T[length];

            for (int i = 0; i < length; i++)
            {
                result[i] = formatter.Deserialize(ref bytes, offset, tracker, out size);
                offset   += size;
            }

            byteSize = offset - startOffset;
            return(result);
        }
Esempio n. 2
0
        public override ISet <T> Deserialize(ref byte[] bytes, int offset, DirtyTracker tracker, out int byteSize)
        {
            tracker.Dirty(); // can not track so mark as dirty.

            var length = BinaryUtil.ReadInt32(ref bytes, offset);

            if (length == -1)
            {
                byteSize = 4;
                return(null);
            }
            BinaryUtil.ValidateNewSize(length); // size is not strict(Marshal.SizeOf<T>()) but okay to use.

            var startOffset = offset;

            offset += 4;
            int size;
            var comparer = ZeroFormatterEqualityComparer <T> .NondeterministicSafeFallbacked;
            var result   = new HashSet <T>(comparer);

            for (int i = 0; i < length; i++)
            {
                result.Add(formatter.Deserialize(ref bytes, offset, tracker, out size));
                offset += size;
            }

            byteSize = offset - startOffset;
            return(result);
        }
        public override ICollection <T> Deserialize(ref byte[] bytes, int offset, DirtyTracker tracker, out int byteSize)
        {
            tracker.Dirty(); // can not track so mark as dirty.

            var length = BinaryUtil.ReadInt32(ref bytes, offset);

            if (length == -1)
            {
                byteSize = 4;
                return(null);
            }
            ZeroFormatterSerializer.ValidateNewLength(length);

            var startOffset = offset;

            offset += 4;
            int size;
            var result = new T[length];

            for (int i = 0; i < length; i++)
            {
                result[i] = formatter.Deserialize(ref bytes, offset, tracker, out size);
                offset   += size;
            }

            byteSize = offset - startOffset;
            return(result);
        }
        public override IDictionary <TKey, TValue> Deserialize(ref byte[] bytes, int offset, DirtyTracker tracker, out int byteSize)
        {
            tracker.Dirty(); // can not track so mark as dirty.

            var length = BinaryUtil.ReadInt32(ref bytes, offset);

            if (length == -1)
            {
                byteSize = 4;
                return(null);
            }
            ZeroFormatterSerializer.ValidateNewLength(length);

            var startOffset = offset;

            offset += 4;
            int size;
            var comparer = ZeroFormatterEqualityComparer <TKey> .NondeterministicSafeFallbacked;
            var result   = new Dictionary <TKey, TValue>(length, comparer);

            for (int i = 0; i < length; i++)
            {
                var kvp = formatter.Deserialize(ref bytes, offset, tracker, out size);
                result.Add(kvp.Key, kvp.Value);
                offset += size;
            }

            byteSize = offset - startOffset;
            return(result);
        }
Esempio n. 5
0
        public override Int32[] Deserialize(ref byte[] bytes, int offset, DirtyTracker tracker, out int byteSize)
        {
            tracker.Dirty(); // can not track so mark as dirty.

            var length = BinaryUtil.ReadInt32(ref bytes, offset);

            if (length == -1)
            {
                byteSize = 4;
                return(null);
            }
            else
            {
                byteSize = length * 4 + 4;
            }

            var arraySize = length * 4;

            ZeroFormatterSerializer.ValidateNewLength(arraySize);
            var result = new Int32[length];

            Buffer.BlockCopy(bytes, offset + 4, result, 0, arraySize);

            return(result);
        }
Esempio n. 6
0
        public override TCollection Deserialize(ref byte[] bytes, int offset, DirtyTracker tracker, out int byteSize)
        {
            tracker.Dirty(); // can not track so mark as dirty.

            var length = BinaryUtil.ReadInt32(ref bytes, offset);

            if (length == -1)
            {
                byteSize = 4;
                return(default(TCollection));
            }

            var startOffset = offset;

            offset += 4;
            int size;

            BinaryUtil.ValidateNewSize(length); // size is not strict(Marshal.SizeOf<T>()) but okay to use.
            TCollection result;

            if (isList)
            {
                // optmize fixed length.
                result = (TCollection)(object)new List <TElement>(length);
            }
            else
            {
                result = new TCollection();
            }
            for (int i = 0; i < length; i++)
            {
                result.Add(formatter.Deserialize(ref bytes, offset, tracker, out size));
                offset += size;
            }

            byteSize = offset - startOffset;
            return(result);
        }
Esempio n. 7
0
        public override Char[] Deserialize(ref byte[] bytes, int offset, DirtyTracker tracker, out int byteSize)
        {
            tracker.Dirty(); // can not track so mark as dirty.

            var length = BinaryUtil.ReadInt32(ref bytes, offset);

            if (length == -1)
            {
                byteSize = 4;
                return(null);
            }
            else
            {
                byteSize = length * 2 + 4;
            }

            BinaryUtil.ValidateNewSize(length * 2);
            var result = new Char[length];

            Buffer.BlockCopy(bytes, offset + 4, result, 0, length * 2);

            return(result);
        }