Beispiel #1
0
        /// <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);
            }
        }
Beispiel #2
0
        /// <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(")]");
        }
Beispiel #3
0
        /// <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);
            }
        }