public static string GenerateFieldReader(Field f)
{
string code = "";
if (f.Rule == FieldRule.Repeated) {
if (f.OptionPacked == true) {
code += "using(MemoryStream ms" + f.ID + " = new MemoryStream(ProtocolParser.ReadBytes(stream)))\n";
code += "{\n";
code += " while(true)\n";
code += " {\n";
code += " if(ms" + f.ID + ".Position == ms" + f.ID + ".Length)\n";
code += " break;\n";
code += " instance." + f.Name + ".Add(" + GenerateFieldTypeReader (f, "ms" + f.ID, "br", null) + ");\n";
code += " }\n";
code += "}\n";
} else {
code += "instance." + f.Name + ".Add(" + GenerateFieldTypeReader (f, "stream", "br", null) + ");\n";
}
} else {
if (f.ProtoType == ProtoTypes.Message) {
code += "if(instance." + f.Name + " == null)\n";
code += " instance." + f.Name + " = " + GenerateFieldTypeReader (f, "stream", "br", null) + ";\n";
code += "else\n";
code += " instance." + f.Name + " = " + GenerateFieldTypeReader (f, "stream", "br", "instance." + f.Name) + ";";
} else
code += "instance." + f.Name + " = " + GenerateFieldTypeReader (f, "stream", "br", "instance." + f.Name) + ";";
}
return code;
}