コード例 #1
0
        public void Deserialize(byte[] buffer, ref int offset, ref TCollection value)
        {
            // How many items?
            var itemCount = SerializerBinary.ReadUInt32(buffer, ref offset);

            value.Clear();

            for (int i = 0; i < itemCount; i++)
            {
                TItem item = default(TItem);
                _itemFormatter.Deserialize(buffer, ref offset, ref item);
                value.Add(item);
            }
        }
コード例 #2
0
        public void Deserialize(byte[] buffer, ref int offset, ref TCollection value)
        {
            int count = (int)SerializerBinary.ReadUInt32(buffer, ref offset);

            var builder = CreateProxy(count);

            for (int i = 0; i < count; i++)
            {
                TItem item = default;

                _itemFormatter.Deserialize(buffer, ref offset, ref item);

                AddToProxy(builder, item);
            }

            Finalize(builder, ref value);
        }
コード例 #3
0
        public unsafe void Deserialize(byte[] buffer, ref int offset, ref T[] value)
        {
            // Count
            int count = (int)SerializerBinary.ReadUInt32(buffer, ref offset);

            if (count > _maxCount)
            {
                throw new InvalidOperationException($"The data describes an array with '{count}' elements, which exceeds the allowed limit of '{_maxCount}'");
            }

            // Create target array
            if (value == null || value.Length != count)
            {
                value = new T[count];
            }


            int bytes = count * _itemSize;

            if (bytes == 0)
                return; }
コード例 #4
0
ファイル: CollectionFormatter.cs プロジェクト: john-h-k/Ceras
        public void Deserialize(byte[] buffer, ref int offset, ref TCollection value)
        {
            // How many items?
            var itemCount = SerializerBinary.ReadUInt32(buffer, ref offset);

            if (itemCount > _maxSize)
            {
                throw new InvalidOperationException($"The data contains a '{typeof(TCollection)}' with '{itemCount}' entries, which exceeds the allowed limit of '{_maxSize}'");
            }


            value.Clear();

            var f = _itemFormatter;

            for (int i = 0; i < itemCount; i++)
            {
                TItem item = default;
                f.Deserialize(buffer, ref offset, ref item);
                value.Add(item);
            }
        }
コード例 #5
0
ファイル: ReinterpretFormatter.cs プロジェクト: nasa03/Ceras
        public unsafe void Deserialize(byte[] buffer, ref int offset, ref T[] value)
        {
            // Count
            int count = (int)SerializerBinary.ReadUInt32(buffer, ref offset);

            if (count > _maxCount)
            {
                throw new InvalidOperationException($"The data describes an array with '{count}' elements, which exceeds the allowed limit of '{_maxCount}'");
            }

            // Create target array
            if (value == null || value.Length != count)
            {
                value = new T[count];
            }

            int bytes = count * _itemSize;

            if (bytes == 0)
            {
                return;
            }

            int remainingBytes = buffer.Length - offset;

            if (bytes > remainingBytes)
                throw new IndexOutOfRangeException($"Trying to read an array of '{typeof(T).FriendlyName()}' ({count} elements, {bytes} bytes) but only {remainingBytes} bytes are left in the buffer (buffer length: {buffer.Length}, offset: {offset}).");

            // Read
            fixed(T *ar = &value[0])
            {
                byte *byteAr = (byte *)ar;

                Marshal.Copy(buffer, offset, new IntPtr(byteAr), bytes);
            }

            offset += bytes;
        }
コード例 #6
0
        public void Deserialize(byte[] buffer, ref int offset, ref List <TItem> value)
        {
            // How many items?
            var itemCount = SerializerBinary.ReadUInt32(buffer, ref offset);

            if (value == null)
            {
                value = new List <TItem>((int)itemCount);
            }
            else
            {
                value.Clear();
            }

            var f = _itemFormatter;

            for (int i = 0; i < itemCount; i++)
            {
                TItem item = default;
                f.Deserialize(buffer, ref offset, ref item);
                value.Add(item);
            }
        }
コード例 #7
0
        public void Deserialize(byte[] buffer, ref int offset, ref Dictionary <TKey, TValue> value)
        {
            // How many items?
            var itemCount = SerializerBinary.ReadUInt32(buffer, ref offset);

            if (value == null)
            {
                value = new Dictionary <TKey, TValue>((int)itemCount);
            }
            else
            {
                value.Clear();
            }

            var f = _itemFormatter;

            for (int i = 0; i < itemCount; i++)
            {
                KeyValuePair <TKey, TValue> item = default;
                f.Deserialize(buffer, ref offset, ref item);
                value.Add(item.Key, item.Value);
            }
        }
コード例 #8
0
ファイル: PrimitiveResolver.cs プロジェクト: hi-octane/Ceras
 public void Deserialize(byte[] buffer, ref int offset, ref uint value)
 {
     value = SerializerBinary.ReadUInt32(buffer, ref offset);
 }