public static object ReadByType(ExtendedBinaryReader reader, ArgumentType type) { switch (type) { case AT_Bool: return(reader.ReadBoolean()); case AT_Byte: return(reader.ReadByte()); case AT_Int16: return(reader.ReadInt16()); case AT_Int32: return(reader.ReadInt32()); case AT_Float: return(reader.ReadSingle()); case AT_String: return(reader.ReadStringElsewhere()); case AT_StringPtr: return(reader.ReadNullTerminatedStringPointer()); case AT_CodePointer: return(reader.ReadInt32()); case AT_DataReference: return(reader.ReadUInt32()); case AT_DataBlock: long position = reader.ReadUInt32(); long length = reader.ReadUInt32(); if (reader.Offset > position) { reader.Offset = (uint)position; } return(new StreamBlock(position, length)); default: return(null); } }