Beispiel #1
0
        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();
            }
        }
Beispiel #2
0
        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);
            }
        }
Beispiel #3
0
        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);
            }
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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);
            }
        }
Beispiel #6
0
        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);
            }
        }
Beispiel #7
0
        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);
            }
        }
Beispiel #8
0
        /// <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);
        }
Beispiel #9
0
        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();
            }
        }
Beispiel #10
0
 public void Serialize(ref byte[] buffer, ref int offset, uint value)
 {
     SerializerBinary.WriteUInt32(ref buffer, ref offset, value);
 }