private static string GetPrivateFieldName(FieldData f) { return string.Format("m{0}", Utils.GetPascalStyleString(f.Name)); }
private static string GetEnumTypeCast(FieldData f) { if (!f.IsEnum) return ""; return String.Format("({0})", GetEnumName(f.EnumType)); }
private static string GetReadOperation(FieldData f) { if (f.IsEnum) { return GetBaseReadOperation(XmlParser.GetFieldTypeFromString(f.TypeString)); } return GetBaseReadOperation(f.Type); }
private static string GetCSharpType(FieldData f) { if (f.IsEnum) return GetEnumName(f.EnumType); return GetBaseCSharpType(f.Type); }
private static string GetSerializeTypeCast(FieldData f) { if (!f.IsEnum) return ""; // Field is enum, use the declared type return string.Format("({0})", GetBaseCSharpType(XmlParser.GetFieldTypeFromString(f.TypeString))); }
private static string GetFieldName(FieldData f) { return Utils.GetPascalStyleString(f.Name); }
private static string GetArrayModifier(FieldData f, bool withNumberOfElements) { int numElements = f.NumElements; if (numElements <= 1) return ""; return string.Format("[{0}]", (withNumberOfElements ? numElements.ToString() : "")); }
// __ Impl _______________________________________________________ private void Parse(XmlTextReader reader, ProtocolData result) { ProtocolObject currentObject = null; MessageData currentMsg = null; FieldData currentField = null; EnumData currentEnum = null; EnumEntry currentEntry = null; EnumEntryParameter currentParam = null; int currentEnumValue = 0; while (reader.Read()) { if (reader.IsStartElement()) { switch (reader.Name) { case "include": ProcessInclude(reader.ReadElementContentAsString(), result); break; case "version": result.Version = reader.ReadElementContentAsInt(); break; case "message": if (currentMsg != null) SortFields(currentMsg); currentMsg = new MessageData(); currentObject = currentMsg; currentMsg.Name = reader.GetAttribute("name"); currentMsg.Id = GetIntFromString(reader.GetAttribute("id")); result.Messages.Add(currentMsg.Name, currentMsg); break; case "description": currentObject.Description = reader.ReadString(); break; case "field": currentField = new FieldData(); currentField.Name = reader.GetAttribute("name"); currentField.TypeString = reader.GetAttribute("type"); currentField.Type = GetFieldTypeFromString(currentField.TypeString); currentField.NumElements = GetFieldTypeNumElements(currentField.TypeString); currentField.Description = reader.ReadElementContentAsString(); UpdateEnumFields(result, currentField); currentMsg.Fields.Add(currentField); break; case "enum": currentEnum = GetEnumDataForName(result, reader.GetAttribute("name")); currentObject = currentEnum; result.Enumerations[currentEnum.Name] = currentEnum; currentEnumValue = 0; break; case "entry": currentEntry = new EnumEntry(); currentObject = currentEntry; currentEntry.Name = reader.GetAttribute("name"); currentEntry.Value = GetIntFromString(reader.GetAttribute("value"), ++currentEnumValue); currentEnumValue = currentEntry.Value; currentEnum.Entries.Add(currentEntry); break; case "param": currentParam = new EnumEntryParameter(); currentParam.Index = GetIntFromString(reader.GetAttribute("index")); currentParam.Description = reader.ReadElementContentAsString(); currentEntry.Parameters.Add(currentParam); break; } } } }
private static string GetDefaultValue(FieldData f) { if (f.NumElements > 1) { // Array value return string.Format(" = new {0}[{1}]", GetCSharpType(f), f.NumElements); } return ""; }
private static void UpdateEnumFields(ProtocolData data, FieldData field) { foreach (string s in data.Enumerations.Keys) { if (field.Description.IndexOf(s) != -1 && field.Type != FieldDataType.FLOAT32) { field.IsEnum = true; field.EnumType = s; return; } } }
private static string GetPrivateFieldName(FieldData f) { return(string.Format("m{0}", Utils.GetPascalStyleString(f.Name))); }
private static string GetFieldName(FieldData f) { return(Utils.GetPascalStyleString(f.Name)); }
// __ Impl _______________________________________________________ private void Parse(XmlTextReader reader, ProtocolData result) { ProtocolObject currentObject = null; MessageData currentMsg = null; FieldData currentField = null; EnumData currentEnum = null; EnumEntry currentEntry = null; EnumEntryParameter currentParam = null; int currentEnumValue = 0; while (reader.Read()) { if (reader.IsStartElement()) { switch (reader.Name) { case "include": ProcessInclude(reader.ReadElementContentAsString(), result); break; case "version": result.Version = reader.ReadElementContentAsInt(); break; case "message": // if (currentMsg != null) SortFields(currentMsg); //<--- if condition deleted currentMsg = new MessageData(); currentObject = currentMsg; currentMsg.Name = reader.GetAttribute("name"); currentMsg.Id = GetIntFromString(reader.GetAttribute("id")); if (currentMsg.Id < 256) // Msg id field is a byte, discard anything beyond 255 { result.Messages.Add(currentMsg.Name, currentMsg); } break; case "description": currentObject.Description = reader.ReadString(); break; case "field": currentField = new FieldData(); currentField.Name = reader.GetAttribute("name"); currentField.TypeString = reader.GetAttribute("type"); currentField.Type = GetFieldTypeFromString(currentField.TypeString); currentField.NumElements = GetFieldTypeNumElements(currentField.TypeString); currentField.Description = reader.ReadElementContentAsString(); UpdateEnumFields(result, currentField); currentMsg.Fields.Add(currentField); break; case "enum": currentEnum = GetEnumDataForName(result, reader.GetAttribute("name")); currentObject = currentEnum; result.Enumerations[currentEnum.Name] = currentEnum; currentEnumValue = 0; break; case "entry": currentEntry = new EnumEntry(); currentObject = currentEntry; currentEntry.Name = reader.GetAttribute("name"); currentEntry.Value = GetIntFromString(reader.GetAttribute("value"), ++currentEnumValue); currentEnumValue = currentEntry.Value; currentEnum.Entries.Add(currentEntry); break; case "param": currentParam = new EnumEntryParameter(); currentParam.Index = GetIntFromString(reader.GetAttribute("index")); currentParam.Description = reader.ReadElementContentAsString(); currentEntry.Parameters.Add(currentParam); break; } } else //<----- Else condition added to control closing of the current node; *** BEGIN **** { if (reader.Name == "message") { if (currentMsg != null) { SortFields(currentMsg); } } } //<----- *** END *** } }
// __ Impl _______________________________________________________ private void Parse(XmlTextReader reader, ProtocolData result) { ProtocolObject currentObject = null; MessageData currentMsg = null; FieldData currentField = null; EnumData currentEnum = null; EnumEntry currentEntry = null; EnumEntryParameter currentParam = null; while (reader.Read()) { if (reader.IsStartElement()) { switch (reader.Name) { case "include": ProcessInclude(reader.ReadElementContentAsString(), result); break; case "version": result.Version = reader.ReadElementContentAsInt(); break; case "message": if (currentMsg != null) { SortFields(currentMsg); } currentMsg = new MessageData(); currentObject = currentMsg; currentMsg.Name = reader.GetAttribute("name"); currentMsg.Id = GetIntFromString(reader.GetAttribute("id")); result.Messages.Add(currentMsg.Name, currentMsg); break; case "description": currentObject.Description = reader.ReadString(); break; case "field": currentField = new FieldData(); currentField.Name = reader.GetAttribute("name"); currentField.TypeString = reader.GetAttribute("type"); currentField.Type = GetFieldTypeFromString(currentField.TypeString); currentField.NumElements = GetFieldTypeNumElements(currentField.TypeString); currentField.Description = reader.ReadElementContentAsString(); UpdateEnumFields(result, currentField); currentMsg.Fields.Add(currentField); break; case "enum": currentEnum = GetEnumDataForName(result, reader.GetAttribute("name")); currentObject = currentEnum; result.Enumerations[currentEnum.Name] = currentEnum; break; case "entry": currentEntry = new EnumEntry(); currentObject = currentEntry; currentEntry.Name = reader.GetAttribute("name"); currentEntry.Value = GetIntFromString(reader.GetAttribute("value")); currentEnum.Entries.Add(currentEntry); break; case "param": currentParam = new EnumEntryParameter(); currentParam.Index = GetIntFromString(reader.GetAttribute("index")); currentParam.Description = reader.ReadElementContentAsString(); currentEntry.Parameters.Add(currentParam); break; } } } }