Beispiel #1
0
        /// <summary>
        /// Generates a <code>GenerateHLASimpleDataAttribute</code>.
        /// </summary>
        private void GenerateHLASimpleDataAttribute(int localIndentLevel, System.IO.StreamWriter ps, HLASimpleData simpleData)
        {
            string indentStr = GenerateIndentString(localIndentLevel);
            string newLine   = "," + Environment.NewLine + indentStr + "                ";

            ps.Write(indentStr + "[HLASimpleData(Name = \"" + simpleData.Name + "\"");
            if (!String.IsNullOrEmpty(simpleData.NameNotes))
            {
                ps.Write(newLine);
                ps.Write("NameNotes = \"" + simpleData.NameNotes + "\"");
            }
            if (!String.IsNullOrEmpty(simpleData.Representation))
            {
                ps.Write(newLine);
                ps.Write("Representation = \"" + simpleData.Representation + "\"");
            }
            if (!String.IsNullOrEmpty(simpleData.RepresentationNotes))
            {
                ps.Write(newLine);
                ps.Write("RepresentationNotes = \"" + simpleData.RepresentationNotes + "\"");
            }
            if (!String.IsNullOrEmpty(simpleData.Semantics))
            {
                ps.Write(newLine);
                ps.Write("Semantics = \"" + simpleData.Semantics + "\"");
            }
            if (!String.IsNullOrEmpty(simpleData.SemanticsNotes))
            {
                ps.Write(newLine);
                ps.Write("SemanticsNotes = \"" + simpleData.SemanticsNotes + "\"");
            }
            if (!String.IsNullOrEmpty(simpleData.Accuracy))
            {
                ps.Write(newLine);
                ps.Write("Accuracy = \"" + simpleData.Accuracy + "\"");
            }
            if (!String.IsNullOrEmpty(simpleData.AccuracyNotes))
            {
                ps.Write(newLine);
                ps.Write("AccuracyNotes = \"" + simpleData.AccuracyNotes + "\"");
            }
            if (!String.IsNullOrEmpty(simpleData.Resolution))
            {
                ps.Write(newLine);
                ps.Write("Resolution = \"" + simpleData.Resolution + "\"");
            }
            if (!String.IsNullOrEmpty(simpleData.ResolutionNotes))
            {
                ps.Write(newLine);
                ps.Write("ResolutionNotes = \"" + simpleData.ResolutionNotes + "\"");
            }
            if (!String.IsNullOrEmpty(simpleData.Units))
            {
                ps.Write(newLine);
                ps.Write("Units = \"" + simpleData.Units + "\"");
            }
            if (!String.IsNullOrEmpty(simpleData.UnitsNotes))
            {
                ps.Write(newLine);
                ps.Write("UnitsNotes = \"" + simpleData.UnitsNotes + "\"");
            }
            ps.WriteLine(")]");
        }
Beispiel #2
0
        /// <summary>
        /// Generates all Simple data types.
        /// </summary>
        private void GenerateSimpleDataType(System.IO.StreamWriter stream, HLASimpleData simpleData)
        {
            int    indentLevel = 0;
            string indentStr   = GenerateIndentString(indentLevel);


            try
            {
                System.IO.StreamWriter sw;
                String typeName = simpleData.Name;
                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(simpleData.Semantics))
                {
                    PrintClassComment(sw, simpleData.Semantics, indentLevel);
                }
                else
                {
                    PrintClassComment(sw, "Autogenerated simple data type.", indentLevel);
                }
                GenerateHLASimpleDataAttribute(indentLevel, sw, simpleData);
                sw.WriteLine(indentStr + "public struct " + typeName);

                sw.WriteLine(indentStr + "{");
                indentLevel++;
                indentStr = GenerateIndentString(indentLevel);

                String representation = simpleData.Representation;
                if (string.IsNullOrEmpty(representation))
                {
                    throw new RTIexception("SimpleData :" + simpleData.Name + "doesn't have a representation");
                }
                String nativeType = NativeTypeForBasicRepresentation(representation);
                string indentStr1 = GenerateIndentString(indentLevel + 1);
                sw.WriteLine(indentStr + "public " + nativeType + " data;");
                sw.WriteLine();
                sw.WriteLine(indentStr + "public static implicit operator " + nativeType + "(" + simpleData.Name + " val)");
                sw.WriteLine(indentStr + "{");
                sw.WriteLine(indentStr1 + "return val.data;");
                sw.WriteLine(indentStr + "}");
                sw.WriteLine();
                sw.WriteLine(indentStr + "public static implicit operator " + simpleData.Name + "(" + nativeType + " val)");
                sw.WriteLine(indentStr + "{");
                sw.WriteLine(indentStr1 + simpleData.Name + " tmp = new " + simpleData.Name + "();");
                sw.WriteLine(indentStr1 + "tmp.data = val;");
                sw.WriteLine(indentStr1 + "return tmp;");
                sw.WriteLine(indentStr + "}");

                sw.WriteLine();
                indentLevel--;
                indentStr = GenerateIndentString(indentLevel);
                sw.WriteLine(indentStr + "}");
                sw.WriteLine();

                sw.WriteLine(indentStr + "[Serializable]");
                sw.WriteLine(indentStr + "public sealed class " + typeName + "XrtiSerializer");
                sw.WriteLine(indentStr + "{");
                indentLevel++;
                indentStr = GenerateIndentString(indentLevel);

                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 simple data type: " + ioe);
            }
        }