public override void Write(XnbReaderManager xnbReaderManager, XnbStreamWriter xnbStreamWriter, object value)
        {
            if (value is Dictionary <TKeyType, TValueType> dictionary)
            {
                xnbStreamWriter.Write(dictionary.Count);
                foreach (KeyValuePair <TKeyType, TValueType> keyValuePair in dictionary)
                {
                    (int keyReaderIndex, XnbTypeReader keyReader) = xnbReaderManager.GetOrAddXnbTypeReaderFromTargetType <TKeyType>();
                    if (!typeof(TKeyType).IsValueType)
                    {
                        xnbStreamWriter.Write7BitEncodedInt(keyReaderIndex);
                    }
                    keyReader.Write(xnbReaderManager, xnbStreamWriter, keyValuePair.Key);

                    (int valueReaderIndex, XnbTypeReader valueReader) = xnbReaderManager.GetOrAddXnbTypeReaderFromTargetType <TValueType>();
                    if (!typeof(TValueType).IsValueType)
                    {
                        xnbStreamWriter.Write7BitEncodedInt(valueReaderIndex);
                    }
                    valueReader.Write(xnbReaderManager, xnbStreamWriter, keyValuePair.Value);
                }
            }
            else
            {
                throw new ArgumentException($"Expected {typeof(Dictionary<TKeyType, TValueType>).Name}, got {value.GetType().Name}");
            }
        }
Example #2
0
 public override void Write(XnbReaderManager xnbReaderManager, XnbStreamWriter xnbStreamWriter, object value)
 {
     if (value is int number)
     {
         xnbStreamWriter.Write(number);
     }
 }
Example #3
0
 public override void Write(XnbReaderManager xnbReaderManager, XnbStreamWriter xnbStreamWriter, object value)
 {
     if (value is string text)
     {
         xnbStreamWriter.Write(text);
     }
 }
        private static XnbTypeReader GetXnbTypeReader <TTargetType>(XnbReaderManager xnbReaderManager, XnbStreamReader xnbStreamReader)
        {
            XnbTypeReader xnbTypeReader;

            if (typeof(TTargetType).IsValueType)
            {
                xnbTypeReader = xnbReaderManager.GetOrAddXnbTypeReaderFromTargetType <TTargetType>().reader;
            }
            else
            {
                int keyReaderIndex = xnbStreamReader.Read7BitEncodedInt();
                xnbTypeReader = xnbReaderManager.XnbReaderFromIndex(keyReaderIndex);
            }

            return(xnbTypeReader);
        }
        public override object Read(XnbReaderManager xnbReaderManager, XnbStreamReader xnbStreamReader)
        {
            var dictionary = new Dictionary <TKeyType, TValueType>();
            int count      = xnbStreamReader.ReadInt32();

            for (var i = 0; i < count; i++)
            {
                var xnbKeyTypeReader = GetXnbTypeReader <TKeyType>(xnbReaderManager, xnbStreamReader);
                var key = (TKeyType)xnbKeyTypeReader.Read(xnbReaderManager, xnbStreamReader);

                var xnbValueTypeReader = GetXnbTypeReader <TValueType>(xnbReaderManager, xnbStreamReader);
                var value = (TValueType)xnbValueTypeReader.Read(xnbReaderManager, xnbStreamReader);

                dictionary.Add(key, value);
            }
            return(dictionary);
        }
Example #6
0
 public override object Read(XnbReaderManager xnbReaderManager, XnbStreamReader xnbStreamReader)
 {
     return(xnbStreamReader.ReadInt32());
 }