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); } }
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); }
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; }
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); } }
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; }
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); } }
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); } }
public void Deserialize(byte[] buffer, ref int offset, ref uint value) { value = SerializerBinary.ReadUInt32(buffer, ref offset); }