82 lines
2.4 KiB
C#

#region Using Statements
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
#endregion
// This file is part of the ANX.Framework created by the
// "ANX.Framework developer group" and released under the Ms-PL license.
// For details see: http://anxframework.codeplex.com/license
namespace ANX.Framework.Content.Pipeline.Serialization.Compiler
{
internal class ArrayWriter<T> : ContentTypeWriter<T[]>
{
private ContentTypeWriter elementWriter;
protected override void Initialize(ContentCompiler compiler)
{
this.elementWriter = compiler.GetTypeWriter(typeof(T));
}
protected internal override void Write(ContentWriter output, T[] value)
{
output.Write(value.Length);
for (int i = 0; i < value.Length; i++)
{
T value2 = value[i];
output.WriteObject<T>(value2, this.elementWriter);
}
}
public override string GetRuntimeReader(TargetPlatform targetPlatform)
{
return string.Concat(new object[]
{
typeof(ContentTypeReader).Namespace,
'.',
"ArrayReader`1[[",
this.elementWriter.GetRuntimeType(targetPlatform),
"]]"
});
}
public override string GetRuntimeType(TargetPlatform targetPlatform)
{
string runtimeType = this.elementWriter.GetRuntimeType(targetPlatform);
int num = 0;
for (int i = 0; i < runtimeType.Length; i++)
{
char c = runtimeType[i];
if (c != ',')
{
switch (c)
{
case '[':
num++;
break;
case ']':
num--;
break;
}
}
else
{
if (num == 0)
{
return runtimeType.Insert(i, "[]");
}
}
}
return runtimeType + "[]";
}
protected internal override bool ShouldCompressContent(TargetPlatform targetPlatform, object value)
{
return this.elementWriter.ShouldCompressContent(targetPlatform, null);
}
}
}