static void PreGenField(MessageInfo message) { cur_gen_fields.Clear(); foreach (var field in message.m_fields.Values.OrderBy(_ => _.m_index)) { FieldInfoForGen gen_field = new FieldInfoForGen(); gen_field.field_info = field; gen_field.name_get = field.m_name; gen_field.name_get_has_set = field.m_name + "Specified"; gen_field.name_define = "__" + gen_field.name_get; gen_field.name_has_set = "__" + gen_field.name_get_has_set; gen_field.name_packed_size = "__" + gen_field.name_get + "__packed_size"; gen_field.name_type_item = GetFieldTypeName(field); if (field.m_is_array) { gen_field.name_type = string.Format("List<{0}>", gen_field.name_type_item); } else { gen_field.name_type = gen_field.name_type_item; } cur_gen_fields.Add(gen_field); } }
static void DefineField(FieldInfoForGen gen_field) { FieldInfo field = gen_field.field_info; // Get and set { AppendLine(2, "public {0} {1}", gen_field.name_type, gen_field.name_get); AppendLine(2, "{"); if (field.m_is_array) { AppendLine(3, "get {{ return {0}; }}", gen_field.name_define); } else if (field.m_type == FieldFormat.FieldType.Message) { AppendLine(3, "get {{ return {0}; }}", gen_field.name_define); AppendLine(3, "set {{ {0} = value; }}", gen_field.name_define, gen_field.name_has_set); } else if (field.m_type == FieldFormat.FieldType.String) { AppendLine(3, "get {{ return {0} ?? \"\"; }}", gen_field.name_define); AppendLine(3, "set {{ {0} = value; }}", gen_field.name_define, gen_field.name_has_set); } else if (field.m_type == FieldFormat.FieldType.Bytes) { AppendLine(3, "get {{ return {0}; }}", gen_field.name_define); AppendLine(3, "set {{ {0} = value; }}", gen_field.name_define, gen_field.name_has_set); } else { AppendLine(3, "get {{ return {0}; }}", gen_field.name_define); AppendLine(3, "set {{ {0} = value; {1} = true; }}", gen_field.name_define, gen_field.name_has_set); } AppendLine(2, "}"); } // define field, has set field, packed size { // define field if (field.m_is_array) { AppendLine(2, "private {0} {1} = new {0}();", gen_field.name_type, gen_field.name_define); if (field.m_is_packed) { AppendLine(2, "private int {0};", gen_field.name_packed_size); } } else { AppendLine(2, "private {0} {1};", gen_field.name_type, gen_field.name_define); } // has set field if (field.m_is_array) { AppendLine(2, "public bool {0} {{ get{{ return {1}.Count > 0; }} }}", gen_field.name_get_has_set, gen_field.name_define); } else if (field.m_type == FieldFormat.FieldType.Message) { AppendLine(2, "public bool {0} {{ get{{ return {1} != null; }} }}", gen_field.name_get_has_set, gen_field.name_define); } else if (field.m_type == FieldFormat.FieldType.String) { AppendLine(2, "public bool {0} {{ get{{ return {1} != null; }} }}", gen_field.name_get_has_set, gen_field.name_define); } else if (field.m_type == FieldFormat.FieldType.Bytes) { AppendLine(2, "public bool {0} {{ get{{ return {1} != null; }} }}", gen_field.name_get_has_set, gen_field.name_define); } else { AppendLine(2, "private bool {0};", gen_field.name_has_set); AppendLine(2, "public bool {0} {{ get{{ return {1}; }} set{{ {1} = value; }} }}", gen_field.name_get_has_set, gen_field.name_has_set); } } }