public void Serialize(NetDataWriter writer, T[,,] value, NetDataSerializerOptions options)
        {
            if (value == null)
            {
                writer.Write(false);
            }
            else
            {
                writer.Write(true);

                var i = value.GetLength(0);
                var j = value.GetLength(1);
                var k = value.GetLength(2);

                INetDataFormatter <T> formatter = options.Resolver.GetFormatter <T>();

                writer.Write(ArrayLength);
                writer.Write(i);
                writer.Write(j);
                writer.Write(k);

                writer.Write((int)value.Length);
                foreach (T item in value)
                {
                    formatter.Serialize(writer, item, options);
                }
            }
        }
예제 #2
0
        public TDictionary Deserialize(NetDataReader reader, NetDataSerializerOptions options)
        {
            if (reader.ReadBoolean() == false)
            {
                return(default(TDictionary));
            }
            else
            {
                INetDataFormatterResolver  resolver       = options.Resolver;
                INetDataFormatter <TKey>   keyFormatter   = resolver.GetFormatter <TKey>();
                INetDataFormatter <TValue> valueFormatter = resolver.GetFormatter <TValue>();

                var len = reader.ReadInt32();

                TIntermediate dict = this.Create(len, options);

                for (int i = 0; i < len; i++)
                {
                    TKey   key   = keyFormatter.Deserialize(reader, options);
                    TValue value = valueFormatter.Deserialize(reader, options);

                    this.Add(dict, i, key, value, options);
                }

                return(this.Complete(dict));
            }
        }
        public T[,,,] Deserialize(NetDataReader reader, NetDataSerializerOptions options)
        {
            if (reader.ReadBoolean() == false)
            {
                return(null);
            }
            else
            {
                INetDataFormatter <T> formatter = options.Resolver.GetFormatter <T>();

                var len = reader.ReadByte();
                if (len != ArrayLength)
                {
                    throw new NetDataSerializationException("Invalid T[,,,] format");
                }

                var iLength = reader.ReadInt32();
                var jLength = reader.ReadInt32();
                var kLength = reader.ReadInt32();
                var lLength = reader.ReadInt32();
                var maxLen  = reader.ReadInt32();
                var array   = new T[iLength, jLength, kLength, lLength];

                var i = 0;
                var j = 0;
                var k = 0;
                var l = -1;

                for (int loop = 0; loop < maxLen; loop++)
                {
                    if (l < lLength - 1)
                    {
                        l++;
                    }
                    else if (k < kLength - 1)
                    {
                        l = 0;
                        k++;
                    }
                    else if (j < jLength - 1)
                    {
                        l = 0;
                        k = 0;
                        j++;
                    }
                    else
                    {
                        l = 0;
                        k = 0;
                        j = 0;
                        i++;
                    }

                    array[i, j, k, l] = formatter.Deserialize(reader, options);
                }

                return(array);
            }
        }
예제 #4
0
        public void Serialize(NetDataWriter writer, TDictionary value, NetDataSerializerOptions options)
        {
            if (value == null)
            {
                writer.Write(false);
            }
            else
            {
                writer.Write(true);

                INetDataFormatterResolver  resolver       = options.Resolver;
                INetDataFormatter <TKey>   keyFormatter   = resolver.GetFormatter <TKey>();
                INetDataFormatter <TValue> valueFormatter = resolver.GetFormatter <TValue>();

                int count;
                {
                    var col = value as ICollection <KeyValuePair <TKey, TValue> >;
                    if (col != null)
                    {
                        count = col.Count;
                    }
                    else
                    {
                        var col2 = value as IReadOnlyCollection <KeyValuePair <TKey, TValue> >;
                        if (col2 != null)
                        {
                            count = col2.Count;
                        }
                        else
                        {
                            throw new NetDataSerializationException("DictionaryFormatterBase's TDictionary supports only ICollection<KVP> or IReadOnlyCollection<KVP>");
                        }
                    }
                }

                writer.Write(count);

                TEnumerator e = this.GetSourceEnumerator(value);
                try
                {
                    while (e.MoveNext())
                    {
                        KeyValuePair <TKey, TValue> item = e.Current;
                        keyFormatter.Serialize(writer, item.Key, options);
                        valueFormatter.Serialize(writer, item.Value, options);
                    }
                }
                finally
                {
                    e.Dispose();
                }
            }
        }
예제 #5
0
 static FormatterCache()
 {
     foreach (INetDataFormatterResolver item in Resolvers)
     {
         INetDataFormatter <T> f = item.GetFormatter <T>();
         if (f != null)
         {
             Formatter = f;
             return;
         }
     }
 }
예제 #6
0
        public void Serialize(NetDataWriter writer, T[] value, NetDataSerializerOptions options)
        {
            if (value == null)
            {
                writer.Write(false);
            }
            else
            {
                writer.Write(true);
                INetDataFormatter <T> formatter = options.Resolver.GetFormatter <T>();

                writer.Write(value.Length);

                for (int i = 0; i < value.Length; i++)
                {
                    formatter.Serialize(writer, value[i], options);
                }
            }
        }
예제 #7
0
 static FormatterCache()
 {
     Formatter = (INetDataFormatter <T>)GeneratedResolverGetFormatterHelper.GetFormatter(typeof(T));
 }
예제 #8
0
 public StaticNullableFormatter(INetDataFormatter <T> underlyingFormatter)
 {
     this.underlyingFormatter = underlyingFormatter;
 }
예제 #9
0
 static FormatterCache()
 {
     Formatter = (INetDataFormatter <T>)DynamicGenericResolverGetFormatterHelper.GetFormatter(typeof(T));
 }