private void writeField(EndianBinaryWriter w, object value)
{
Type type = value.GetType();
string typeName = type.Name;
if (type.IsArray) {
if (type.GetElementType().IsPrimitive) {
foreach (var v in (IEnumerable)value) {
if (consoleMode)
Console.WriteLine("{0}", v);
writeField(w, v);
}
} else {
foreach (var v in (IEnumerable)value)
writeStruct(w, v);
}
} else {
switch (typeName) {
case "UInt32":
w.Write((UInt32)value);
if (consoleMode)
Console.WriteLine("mask: {0:x}", value);
break;
case "Int32":
w.Write((Int32)value);
break;
case "Int16":
w.Write((Int16)value);
break;
case "Byte":
w.Write((Byte)value);
break;
case "Single":
w.Write((float)value);
break;
case "Double":
w.Write((double)value);
break;
default:
if (consoleMode)
Console.WriteLine("Unhandled type {0} (value: {1})", typeName, value);
throw new System.Exception("Unhandled type");
}
}
}