Commit Description:
Various UI improvements.
Commit Description:
Various UI improvements.
File last commit:
Show/Diff file:
Action:
FNA/src/Content/ContentReaders/ArrayReader.cs
85 lines | 1.6 KiB | text/x-csharp | CSharpLexer
#region License
/* FNA - XNA4 Reimplementation for Desktop Platforms
* Copyright 2009-2020 Ethan Lee and the MonoGame Team
*
* Released under the Microsoft Public License.
* See LICENSE for details.
*/
/* Derived from code by the Mono.Xna Team (Copyright 2006).
* Released under the MIT License. See monoxna.LICENSE for details.
*/
#endregion
#region Using Statements
using System;
#endregion
namespace Microsoft.Xna.Framework.Content
{
internal class ArrayReader<T> : ContentTypeReader<T[]>
{
#region Private ContentTypeReader Instance
ContentTypeReader elementReader;
#endregion
#region Public Constructor
public ArrayReader()
{
}
#endregion
#region Protected Initialization Method
protected internal override void Initialize(ContentTypeReaderManager manager)
{
Type readerType = typeof(T);
elementReader = manager.GetTypeReader(readerType);
}
#endregion
#region Protected Read Method
protected internal override T[] Read(ContentReader input, T[] existingInstance)
{
uint count = input.ReadUInt32();
T[] array = existingInstance;
if (array == null)
{
array = new T[count];
}
if (typeof(T).IsValueType)
{
for (uint i = 0; i < count; i += 1)
{
array[i] = input.ReadObject<T>(elementReader);
}
}
else
{
for (uint i = 0; i < count; i += 1)
{
int readerType = input.Read7BitEncodedInt();
if (readerType > 0)
{
array[i] = input.ReadObject<T>(
input.TypeReaders[readerType - 1]
);
}
else {
array[i] = default(T);
}
}
}
return array;
}
#endregion
}
}