コード例 #1
0
        public static void SerializeArray3DField <T>(SerializeContext context, BinaryWriter bw, T[,,] array)
        {
            if (!context.Walk(array))             // null check
            {
                return;
            }

            context.VisitObject(array);

            int length0, length1, length2;

            bw.WriteSmallInt32(length0 = array.GetLength(0));
            bw.WriteSmallInt32(length1 = array.GetLength(1));
            bw.WriteSmallInt32(length2 = array.GetLength(2));

            for (var i = 0; i < length0; i++)
            {
                for (var j = 0; j < length1; j++)
                {
                    for (var k = 0; k < length2; k++)
                    {
                        Field.Serialize(context, bw, ref array[i, j, k]);
                    }
                }
            }

            context.LeaveObject();
        }
コード例 #2
0
        public static void SerializeField(SerializeContext context, BinaryWriter bw, string value)
        {
            if (context.WalkString(value) == null)             // null check
            {
                return;
            }

            context.VisitObject(value);
            bw.Write(value);
            context.LeaveObject();
        }
コード例 #3
0
        public static void Serialize <T>(SerializeContext context, BinaryWriter bw, LinkedList <T> list)
        {
            context.VisitObject(list);

            bw.WriteSmallInt32(list.Count);             // O(1)
            foreach (var entry in list)
            {
                var item = entry;
                Field.Serialize(context, bw, ref item);
            }

            context.LeaveObject();
        }
コード例 #4
0
        public static void Serialize <T>(SerializeContext context, BinaryWriter bw, Queue <T> queue)
        {
            context.VisitObject(queue);

            bw.WriteSmallInt32(queue.Count);
            foreach (var entry in queue)
            {
                var item = entry;
                Field.Serialize(context, bw, ref item);
            }

            context.LeaveObject();
        }
コード例 #5
0
ファイル: SerializeList.cs プロジェクト: rosebud667/Pixel3D
        public static void Serialize <T>(SerializeContext context, BinaryWriter bw, List <T> list)
        {
            context.VisitObject(list);

            bw.WriteSmallInt32(list.Count);
            for (var i = 0; i < list.Count; i++)
            {
                var item = list[i];
                Field.Serialize(context, bw, ref item);
            }

            context.LeaveObject();
        }
コード例 #6
0
        public static void Serialize <T>(SerializeContext context, BinaryWriter bw, Stack <T> stack)
        {
            context.VisitObject(stack);

            bw.WriteSmallInt32(stack.Count);
            foreach (var entry in stack)
            {
                var item = entry;
                Field.Serialize(context, bw, ref item);
            }

            context.LeaveObject();
        }
コード例 #7
0
        public static void SerializeField(SerializeContext context, BinaryWriter bw, StringBuilder stringBuilder)
        {
            if (!context.Walk(stringBuilder))             // null check
            {
                return;
            }

            context.VisitObject(stringBuilder);

            bw.WriteSmallInt32(stringBuilder.Length);
            for (var i = 0; i < stringBuilder.Length; i++)
            {
                bw.Write(stringBuilder[i]);
            }

            context.LeaveObject();
        }
コード例 #8
0
        // NOTE: Do *not* mark these as [CustomFieldSerializer] (will get rejected anyway)
        //       They are accessed directly by the serializer and generator (via ArrayFieldMethodProvider)

        public static void SerializeArrayField <T>(SerializeContext context, BinaryWriter bw, T[] array)
        {
            if (!context.Walk(array))             // null check
            {
                return;
            }

            context.VisitObject(array);

            bw.WriteSmallInt32(array.Length);
            for (var i = 0; i < array.Length; i++)
            {
                Field.Serialize(context, bw, ref array[i]);
            }

            context.LeaveObject();
        }
コード例 #9
0
        public static void Serialize <TKey, TValue>(SerializeContext context, BinaryWriter bw, OrderedDictionary <TKey, TValue> dictionary)
        {
            // TODO: Add support for custom comparers
            if (!dictionary.Comparer.Equals(Sample <TKey, TValue> .sample.Comparer))
            {
                throw new NotImplementedException("Serializing a custom comparer is not implemented");
            }

            context.VisitObject(dictionary);

            bw.WriteSmallInt32(dictionary.Count);

            foreach (var item in dictionary)
            {
                TKey   key   = item.Key;
                TValue value = item.Value;
                Field.Serialize(context, bw, ref key);
                Field.Serialize(context, bw, ref value);
            }

            context.LeaveObject();
        }
コード例 #10
0
        public static void SerializeArray2DField <T>(SerializeContext context, BinaryWriter bw, T[,] array)
        {
            if (!context.Walk(array))             // null check
            {
                return;
            }

            context.VisitObject(array);

            int length0, length1;

            bw.WriteSmallInt32(length0 = array.GetLength(0));
            bw.WriteSmallInt32(length1 = array.GetLength(1));

            for (var i = 0; i < length0; i++)
            {
                for (var j = 0; j < length1; j++)         // NOTE: Arrays are contiguious on their rightmost (last) dimension
                {
                    Field.Serialize(context, bw, ref array[i, j]);
                }
            }

            context.LeaveObject();
        }
コード例 #11
0
 // "Ignore" serializer, as per SerializeIgnoreXNA -- we want to be able to store a ref for the definition table, but we can't deserialize a sound effect
 [CustomSerializer] public static void Serialize(SerializeContext context, BinaryWriter bw, SafeSoundEffect value)
 {
     context.VisitObject(value); context.LeaveObject();
 }