/// <summary> /// Generates an enumerated data type class. /// </summary> private void GenerateEnumeratedDataTypeSerializer(System.IO.StreamWriter stream, HLAEnumeratedData enumeratedData, int indentLevel) { string indentStr = GenerateIndentString(indentLevel); String typeName = enumeratedData.Name; try { System.IO.StreamWriter sw; if (stream == null) { String qualifiedTypeName = packagePrefix + typeName + "XrtiSerializer"; String path = qualifiedTypeName.Replace('.', Path.DirectorySeparatorChar) + ".cs"; System.IO.FileInfo sourceFile = new System.IO.FileInfo(targetDirectory.FullName + Path.DirectorySeparatorChar + path); System.IO.Directory.CreateDirectory(new System.IO.FileInfo(sourceFile.DirectoryName).FullName); System.IO.FileStream fos = new System.IO.FileStream(sourceFile.FullName, System.IO.FileMode.Create); sw = new System.IO.StreamWriter(fos); System.String packageName = GetPackageName(qualifiedTypeName); if (packageName != null) { sw.WriteLine(indentStr + "namespace " + packageName); } else { sw.WriteLine(indentStr + "namespace Sxta.Rti1516.Proxies"); } sw.WriteLine(indentStr + "{"); indentLevel++; indentStr = GenerateIndentString(indentLevel); sw.WriteLine(indentStr + "using System;"); sw.WriteLine(indentStr + "using System.IO;"); sw.WriteLine(); sw.WriteLine(indentStr + "using HlaEncodingReader = Sxta.Rti1516.Serializers.XrtiEncoding.HlaEncodingReader;"); sw.WriteLine(indentStr + "using HlaEncodingWriter = Sxta.Rti1516.Serializers.XrtiEncoding.HlaEncodingWriter;"); sw.WriteLine(indentStr + "using Sxta.Rti1516.Reflection;"); } else { sw = stream; } sw.WriteLine(); PrintClassComment(sw, "Autogenerated Serializer for enumerated data type.", indentLevel); sw.WriteLine(indentStr + "public sealed class " + typeName + "XrtiSerializer"); sw.WriteLine(indentStr + "{"); indentLevel++; indentStr = GenerateIndentString(indentLevel); String representation = enumeratedData.Representation; if (string.IsNullOrEmpty(representation)) { //TODO representation = "HLAInteger32BE"; } String nativeType = NativeTypeForBasicRepresentation(representation); sw.WriteLine(indentStr + "///<summary> Reads and returns a " + typeName + " from the specified stream.</summary>"); sw.WriteLine(indentStr + "///<param name=\"reader\"> the input stream to read from</param>"); sw.WriteLine(indentStr + "///<returns>return the decoded value</returns>"); sw.WriteLine(indentStr + "///<exception cref=\"IOException\"> if an error occurs</exception>"); sw.WriteLine(indentStr + "public static " + typeName + " Deserialize(HlaEncodingReader reader)"); sw.WriteLine(indentStr + "{"); sw.WriteLine(GenerateIndentString(indentLevel + 1) + "return (" + typeName + ")reader.Read" + representation + "();"); sw.WriteLine(indentStr + "}"); sw.WriteLine(); sw.WriteLine(indentStr + "///<summary>Writes this " + typeName + " to the specified stream.</summary>"); sw.WriteLine(indentStr + "///<param name=\"writer\"> the stream to write to</param>"); sw.WriteLine(indentStr + "///<exception cref=\"IOException\"> if an error occurs</exception>"); sw.WriteLine(indentStr + "public static void Serialize(HlaEncodingWriter writer, " + typeName + " val)"); sw.WriteLine(indentStr + "{"); sw.WriteLine(GenerateIndentString(indentLevel + 1) + "writer.Write" + representation + "((" + nativeType + ")val);"); sw.WriteLine(indentStr + "}"); sw.WriteLine(); indentLevel--; indentStr = GenerateIndentString(indentLevel); sw.WriteLine(indentStr + "}"); if (stream == null) { indentLevel--; indentStr = GenerateIndentString(indentLevel); sw.WriteLine(indentStr + "}"); sw.Flush(); sw.Close(); } } catch (System.IO.IOException ioe) { System.Console.Error.WriteLine("Error generating enumerated data type: " + ioe); } }
/// <summary> /// Generates a <code>GenerateHLAEnumeratedDataAttribute</code>. /// </summary> private void GenerateHLAEnumeratedDataAttribute(int localIndentLevel, System.IO.StreamWriter ps, HLAEnumeratedData enumData) { string indentStr = GenerateIndentString(localIndentLevel); string newLine = "," + Environment.NewLine + indentStr + " "; ps.Write(indentStr + "[HLAEnumeratedData(Name = \"" + enumData.Name + "\""); if (!String.IsNullOrEmpty(enumData.Representation)) { ps.Write(newLine); ps.Write("Representation = \"" + enumData.Representation + "\""); } if (!String.IsNullOrEmpty(enumData.RepresentationNotes)) { ps.Write(newLine); ps.Write("RepresentationNotes = \"" + enumData.RepresentationNotes + "\""); } if (!String.IsNullOrEmpty(enumData.Semantics)) { ps.Write(newLine); ps.Write("Semantics = \"" + enumData.Semantics + "\""); } if (!String.IsNullOrEmpty(enumData.SemanticsNotes)) { ps.Write(newLine); ps.Write("SemanticsNotes = \"" + enumData.SemanticsNotes + "\""); } if (!String.IsNullOrEmpty(enumData.NameNotes)) { ps.Write(newLine); ps.Write("NameNotes = \"" + enumData.NameNotes + "\""); } ps.WriteLine(")]"); }
/// <summary> /// Generates an enumerated data type class. /// </summary> private void GenerateEnumeratedDataType(System.IO.StreamWriter stream, HLAEnumeratedData enumeratedData) { int indentLevel = 0; string indentStr = GenerateIndentString(indentLevel); String typeName = enumeratedData.Name; try { System.IO.StreamWriter sw; if (stream == null) { String qualifiedTypeName = packagePrefix + typeName; String path = qualifiedTypeName.Replace('.', Path.DirectorySeparatorChar) + ".cs"; System.IO.FileInfo sourceFile = new System.IO.FileInfo(targetDirectory.FullName + Path.DirectorySeparatorChar + path); System.IO.Directory.CreateDirectory(new System.IO.FileInfo(sourceFile.DirectoryName).FullName); System.IO.FileStream fos = new System.IO.FileStream(sourceFile.FullName, System.IO.FileMode.Create); sw = new System.IO.StreamWriter(fos); System.String packageName = GetPackageName(qualifiedTypeName); if (packageName != null) { sw.WriteLine(indentStr + "namespace " + packageName); } else { sw.WriteLine(indentStr + "namespace Sxta.Rti1516.Proxies"); } sw.WriteLine(indentStr + "{"); indentLevel++; indentStr = GenerateIndentString(indentLevel); sw.WriteLine(indentStr + "using System;"); sw.WriteLine(indentStr + "using System.IO;"); sw.WriteLine(); sw.WriteLine(indentStr + "using HlaEncodingReader = Sxta.Rti1516.Serializers.XrtiEncoding.HlaEncodingReader;"); sw.WriteLine(indentStr + "using HlaEncodingWriter = Sxta.Rti1516.Serializers.XrtiEncoding.HlaEncodingWriter;"); sw.WriteLine(indentStr + "using Sxta.Rti1516.Reflection;"); } else { sw = stream; } sw.WriteLine(); if (!string.IsNullOrEmpty(enumeratedData.Semantics)) { PrintClassComment(sw, enumeratedData.Semantics, indentLevel); } else { PrintClassComment(sw, "Autogenerated enumerated data type.", indentLevel); } GenerateHLAEnumeratedDataAttribute(indentLevel, sw, enumeratedData); sw.WriteLine(indentStr + "public enum " + typeName); sw.WriteLine(indentStr + "{"); indentLevel++; indentStr = GenerateIndentString(indentLevel); int len = enumeratedData.Enumerators.Count; int i = 0; foreach (HLAEnumerator enumerator in enumeratedData.Enumerators) { sw.Write(indentStr + ConvertToIdentifier(enumerator.Name)); if (!string.IsNullOrEmpty(enumerator.Values)) { sw.Write(" = " + enumerator.Values); } if (i < len - 1) { //Last case without "," sw.WriteLine(","); } i++; } sw.WriteLine(); indentLevel--; indentStr = GenerateIndentString(indentLevel); sw.WriteLine(indentStr + "}"); sw.WriteLine(); if (stream == null) { indentLevel--; indentStr = GenerateIndentString(indentLevel); sw.WriteLine(indentStr + "}"); sw.Flush(); sw.Close(); } } catch (System.IO.IOException ioe) { System.Console.Error.WriteLine("Error generating enumerated data type: " + ioe); } }