public void CloneFrom(FieldData f) { this.Type = f.Type; this.TypeString = f.TypeString; this.Units = f.Units; this.Elements = f.Elements; this.ElementNames = f.ElementNames; this.Options = f.Options; this.DefaultValues = f.DefaultValues; }
private static string GetEnumName(ObjectData obj, FieldData f, bool includeDot) { if (!f.IsEnum) return ""; return string.Format("{0}_{1}{2}", obj.Name, f.Name, (includeDot ? "." : "") ); }
private static string GetReadOperation(FieldData f) { switch (f.TypeString) { case "float": return "ReadSingle"; case "int8": return "ReadSByte"; case "uint8": return "ReadByte"; case "int16": return "ReadInt16"; case "uint16": return "ReadUInt16"; case "int32": return "ReadInt32"; case "uint32": return "ReadUInt32"; case "enum": return "ReadByte"; default: Console.WriteLine("ERROR: Unknown uavType: " + f.TypeString); return "UNKNOWN_UAV_TYPE"; } }
private static string GetEnumTypeCast(ObjectData obj, FieldData f) { if (!f.IsEnum) return ""; return String.Format("({0})", GetEnumName(obj, f, false)); }
private static string GetSerializeTypeCast(ObjectData obj, FieldData f) { if (!f.IsEnum) return ""; return "(byte)"; }
private static string GetCSharpType(ObjectData obj, FieldData f) { switch (f.TypeString) { case "float": return "float"; case "int8": return "SByte"; case "uint8": return "byte"; case "int16": return "Int16"; case "uint16": return "UInt16"; case "enum": return GetEnumName(obj, f, false); case "int32": return "Int32"; case "uint32": return "UInt32"; default: Console.WriteLine("ERROR: Unknown uavType: " + f.TypeString); return "!!!!"; } }
private static string GetArrayModifier(FieldData f, bool withNumberOfElements) { int numElements = f.NumElements; if (numElements <= 1) return ""; return string.Format("[{0}]", (withNumberOfElements ? numElements.ToString() : "")); }
private static ObjectData GetObjectFromXml(XmlTextReader reader) { ObjectData currentObject = null; FieldData currentField = null; while (reader.Read()) { if (reader.IsStartElement()) { switch (reader.Name) { case "object": currentObject = new ObjectData(); currentObject.Name = reader.GetAttribute("name"); currentObject.IsSettingsInt = GetIntFromBoolString(reader.GetAttribute("settings")); currentObject.IsSingleInstInt = GetIntFromBoolString(reader.GetAttribute("singleinstance")); break; case "description": currentObject.Description = reader.ReadString(); break; case "field": currentField = new FieldData(); currentField.Name = reader.GetAttribute("name"); currentObject.FieldsIndexedByName.Add(currentField.Name, currentField); if (IsClone(reader)) { currentField.CloneFrom(currentObject.FieldsIndexedByName[reader.GetAttribute("cloneof")]); } else { currentField.TypeString = reader.GetAttribute("type"); currentField.Type = GetFieldTypeFromString(currentField.TypeString); currentField.Elements = reader.GetAttribute("elements"); currentField.Units = reader.GetAttribute("units"); currentField.ParseElementNamesFromAttribute(reader.GetAttribute("elementnames")); currentField.ParseOptionsFromAttribute(reader.GetAttribute("options")); currentField.ParseDefaultValuesFromAttribute(reader.GetAttribute("defaultvalue")); } currentObject.Fields.Add(currentField); break; case "option": currentField.Options.Add(reader.ReadString()); break; case "elementname": currentField.ElementNames.Add(reader.ReadString()); break; } } } ExpandDefaultValues(currentObject); SortFields(currentObject); SummaryGenerator.RegisterObjectId( Hasher.CalculateId(currentObject), string.Format("{0}.{1}", CSharpGenerator.Namespace, currentObject.Name)); return currentObject; }
private static string GetDefaultValuesList(ObjectData obj, FieldData f) { // Case 0: No default values: just return empty. if (f.DefaultValues.Count == 0) return ""; // Case 1: there is a default value for every item if (f.DefaultValues.Count == f.NumElements) { if (f.IsEnum) return GetBracketedString(GetEnumCommaSeparatedValues(GetEnumName(obj, f, false), f.DefaultValues)); else return GetBracketedString(GetCommaSeparatedValues(f.DefaultValues, GetFieldTypeSuffix(f))); } return ""; }
private static string GetFormattedDefaultValue(ObjectData obj, FieldData f, int index) { if (f.IsEnum) { return string.Format("{0}.{1}", GetEnumName(obj, f, false), FieldData.GetEscapedItemName(f.DefaultValues[index])); } else { return string.Format("{0}{1}", f.DefaultValues[index], GetFieldTypeSuffix(f)); } }
private static string GetDefaultValue(ObjectData obj, FieldData f) { // Cases: // - Single value // - float n = 0.0f // - MyEnum n = MyEnum.Value // - Array value // - float[] n = new float[3]; // Roll, Pitch, Yaw // - float[] n = new float[3] { 0.1f, 2f, 0.3f }; // Roll, Pitch, Yaw // - MyEnum[] n = new MyEnum[3] { MyEnum.Value, MyEnum.Value }; // RollMode, PitchMode if (f.NumElements <= 1) { // Single value if (f.DefaultValues.Count == 1) { return " = " + GetFormattedDefaultValue(obj, f, 0); } } else { // Array value return string.Format(" = new {0}[{1}] {2}", GetCSharpType(obj, f), f.NumElements, GetDefaultValuesList(obj, f)); } return ""; }
// __ Helpers _____________________________________________________________ private static string GetElementNameAt(FieldData f, int index) { if (index < f.ElementNames.Count) return f.ElementNames[index]; return "NO_ELEMENT_NAME"; }
private static string GetPrivateFieldName(FieldData f) { return(string.Format("m{0}", f.Name)); }
// __ Impl _______________________________________________________ private static ObjectData GetObjectFromXml(XDocument xmlDocument) { ObjectData currentObject = null; FieldData currentField = null; if (xmlDocument.DescendantNodes().Any()) { currentObject = new ObjectData(); IEnumerable<XNode> nodes = xmlDocument.DescendantNodes(); foreach (dynamic node in nodes) { if (node is XElement) { string name = node.Name.LocalName; var xnode = node as XElement; switch (name) { case "object": var nameElement = xnode.Attributes().FirstOrDefault(a => a.Name.LocalName == "name"); if (nameElement != null) currentObject.Name = nameElement.Value; var settigsElement = xnode.Attributes().FirstOrDefault(a => a.Name.LocalName == "settings"); if (settigsElement != null) currentObject.IsSettingsInt = GetIntFromBoolString(settigsElement.Value); currentObject.IsSingleInstInt = GetIntFromBoolString( xnode.Attributes() .FirstOrDefault(a => a.Name.LocalName == "singleinstance") .Value); break; case "description": currentObject.Description = node.Value; break; case "field": currentField = new FieldData(); currentField.Name = xnode.Attributes().FirstOrDefault(a => a.Name.LocalName == "name").Value; currentObject.FieldsIndexedByName.Add(currentField.Name, currentField); if (IsClone(node)) { currentField.CloneFrom( currentObject.FieldsIndexedByName[ xnode.Attributes().FirstOrDefault(a => a.Name.LocalName == "cloneof").Value]); } else { XAttribute typeElement = xnode.Attributes().FirstOrDefault(a => a.Name.LocalName == "type"); if (typeElement != null) { string typeString = typeElement.Value; currentField.TypeString = typeString; currentField.Type = GetFieldTypeFromString(currentField.TypeString); XAttribute elementsAttribute = xnode.Attributes().FirstOrDefault(a => a.Name.LocalName == "elements"); if (elementsAttribute != null) currentField.Elements = elementsAttribute.Value; XAttribute unitsElement = xnode.Attributes().FirstOrDefault(a => a.Name.LocalName == "units"); if (unitsElement != null) currentField.Units = unitsElement.Value; XAttribute elementNamesElement = xnode.Attributes().FirstOrDefault(a => a.Name.LocalName == "elementnames"); if ( elementNamesElement != null) currentField.ParseElementNamesFromAttribute(elementNamesElement.Value); XAttribute optionsElement = xnode.Attributes().FirstOrDefault(a => a.Name.LocalName == "options"); if (optionsElement != null) currentField.ParseOptionsFromAttribute(optionsElement.Value); XAttribute defaultValueElement = xnode.Attributes().FirstOrDefault(a => a.Name.LocalName == "defaultvalue"); if ( defaultValueElement != null) currentField.ParseDefaultValuesFromAttribute(defaultValueElement.Value); } } currentObject.Fields.Add(currentField); break; case "option": currentField.Options.Add(node.Value); break; case "elementname": currentField.ElementNames.Add(node.Value); break; } } } ExpandDefaultValues(currentObject); SortFields(currentObject); SummaryGenerator.RegisterObjectId( Hasher.CalculateId(currentObject), string.Format("{0}.{1}", CSharpGenerator.Namespace, currentObject.Name)); } return currentObject; }
private static string GetEnumItems(FieldData f) { if (!f.IsEnum) return ""; List<string> escapedEnum = new List<string>(); foreach (string s in f.Options) escapedEnum.Add(FieldData.GetEscapedItemName(s)); return GetCommaSeparatedValues(escapedEnum, ""); }
private static string GetPrivateFieldName(FieldData f) { return string.Format("m{0}", f.Name); }
private static string GetFieldTypeSuffix(FieldData f) { switch (f.Type) { case FieldDataType.FLOAT32: return "f"; default: return ""; } }