public void Serialize(ref byte[] buffer, ref int offset, TCollection value) { if (value.IsReadOnly) { ThrowReadonly(value); } // Write how many items do we have SerializerBinary.WriteUInt32(ref buffer, ref offset, (uint)value.Count); // Write each item var f = _itemFormatter; // Guarantee no boxing IEnumerator <TItem> e = value.GetEnumerator(); try { while (e.MoveNext()) { f.Serialize(ref buffer, ref offset, e.Current); } } finally { e.Dispose(); } }
public void Serialize(ref byte[] buffer, ref int offset, TCollection value) { // Write how many items do we have SerializerBinary.WriteUInt32(ref buffer, ref offset, (uint)value.Count); // Write each item foreach (var item in value) { _itemFormatter.Serialize(ref buffer, ref offset, item); } }
public void Serialize(ref byte[] buffer, ref int offset, Dictionary <TKey, TValue> value) { // Write how many items do we have SerializerBinary.WriteUInt32(ref buffer, ref offset, (uint)value.Count); // Write each item var f = _itemFormatter; foreach (var kvp in value) { f.Serialize(ref buffer, ref offset, kvp); } }
public void Serialize(ref byte[] buffer, ref int offset, BitArray value) { int bits = value.Count; SerializerBinary.WriteUInt32(ref buffer, ref offset, (uint)bits); var ints = (bits / 32) + 1; int[] ar = new int[ints]; value.CopyTo(ar, 0); _intFormatter.Serialize(ref buffer, ref offset, ar); }
public void Serialize(ref byte[] buffer, ref int offset, List <TItem> value) { // Write how many items do we have SerializerBinary.WriteUInt32(ref buffer, ref offset, (uint)value.Count); // Write each item var f = _itemFormatter; for (var i = 0; i < value.Count; i++) { var item = value[i]; f.Serialize(ref buffer, ref offset, item); } }
public void Serialize(ref byte[] buffer, ref int offset, TCollection value) { if (value.IsReadOnly) { ThrowReadonly(value); } // Write how many items do we have SerializerBinary.WriteUInt32(ref buffer, ref offset, (uint)value.Count); // Write each item var f = _itemFormatter; foreach (var item in value) { f.Serialize(ref buffer, ref offset, item); } }
public void Serialize(ref byte[] buffer, ref int offset, Array baseAr) { // Dimensions int dimensions = baseAr.Rank; SerializerBinary.WriteUInt32(ref buffer, ref offset, (uint)dimensions); // Dimension sizes for (int d = 0; d < dimensions; d++) { var size = baseAr.GetLength(d); SerializerBinary.WriteUInt32(ref buffer, ref offset, (uint)size); } var f = _itemFormatter; foreach (var item in baseAr) { f.Serialize(ref buffer, ref offset, (TItem)item); } }
/// <summary> /// Writes an object into a stream. This method prefixes the data with the actual size (in VarInt encoding). /// <para>This method(-pair) is intended to be an easy to understand example for networking scenarios.</para> /// <para>The implementation is reasonably efficient, but of course you can do a lot better with a solution specifically tailored to your scenario...</para> /// </summary> public static void WriteToStream(this CerasSerializer ceras, Stream stream, object obj) { if (_lengthPrefixBuffer == null) { _lengthPrefixBuffer = new byte[5]; } // Serialize the object int size = ceras.Serialize <object>(obj, ref _streamBuffer); // Determine size prefix of the packet int sizeBytesLength = 0; SerializerBinary.WriteUInt32(ref _lengthPrefixBuffer, ref sizeBytesLength, (uint)size); // Write size stream.Write(_lengthPrefixBuffer, 0, sizeBytesLength); // Write payload stream.Write(_streamBuffer, 0, size); }
public void Serialize(ref byte[] buffer, ref int offset, TCollection value) { SerializerBinary.WriteUInt32(ref buffer, ref offset, (uint)value.Count); var itemFormatter = _itemFormatter; // Manual enumeration to prevent boxing // ReSharper disable once SuggestVarOrType_Elsewhere IEnumerator <TItem> e = value.GetEnumerator(); try { while (e.MoveNext()) { itemFormatter.Serialize(ref buffer, ref offset, e.Current); } } finally { e.Dispose(); } }
public void Serialize(ref byte[] buffer, ref int offset, uint value) { SerializerBinary.WriteUInt32(ref buffer, ref offset, value); }