Example #1
0
        public virtual string TransformText()
        {
            this.GenerationEnvironment = null;

            #line 1 ""
            this.Write("");

            #line default
            #line hidden

            #line 7 ""
            this.Write("\n#include <iostream>\n#include <cstring>\n#include \"");

            #line default
            #line hidden

            #line 10 ""
            this.Write(this.ToStringHelper.ToStringWithCulture(RSP.Process.Name));

            #line default
            #line hidden

            #line 10 ""
            this.Write(".hpp\"\n\n// Insert additional includes and methods here\n// #### USER-DATA-EXTRA-STA" +
                       "RT\n// #### USER-DATA-EXTRA-END\n\n\n");

            #line default
            #line hidden

            #line 17 ""

            var busses  = RSP.Process.InputBusses.Concat(RSP.Process.OutputBusses).Concat(RSP.Process.InternalBusses).Distinct().OrderBy(x => x.Name).ToArray();
            var members = RSP.Process.SharedVariables.Cast <DataElement>().Union(RSP.Process.SharedSignals).ToArray();


            #line default
            #line hidden

            #line 21 ""
            this.Write("\n");

            #line default
            #line hidden

            #line 22 ""
            this.Write(this.ToStringHelper.ToStringWithCulture(RSP.Process.Name));

            #line default
            #line hidden

            #line 22 ""
            this.Write("::");

            #line default
            #line hidden

            #line 22 ""
            this.Write(this.ToStringHelper.ToStringWithCulture(RSP.Process.Name));

            #line default
            #line hidden

            #line 22 ""
            this.Write("(\n");

            #line default
            #line hidden

            #line 23 ""
            foreach (var bus in busses)
            {
            #line default
            #line hidden

            #line 24 ""
                this.Write("    ");

            #line default
            #line hidden

            #line 24 ""
                this.Write(this.ToStringHelper.ToStringWithCulture(bus.Name));

            #line default
            #line hidden

            #line 24 ""
                this.Write("* p");

            #line default
            #line hidden

            #line 24 ""
                this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusNameToValidName(bus, RSP.Process)));

            #line default
            #line hidden

            #line 24 ""
                this.Write(this.ToStringHelper.ToStringWithCulture((bus == busses.Last() && members.Length == 0) ? "" : ","));

            #line default
            #line hidden

            #line 24 ""
                this.Write("\n");

            #line default
            #line hidden

            #line 25 ""
            }

            #line default
            #line hidden

            #line 26 ""
            foreach (var v in members)
            {
                var rt = RS.TypeScope.GetType(v);
                if (rt.IsArray)
                {
            #line default
            #line hidden

            #line 29 ""
                    this.Write("    size_t init_size_");

            #line default
            #line hidden

            #line 29 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(v.Name));

            #line default
            #line hidden

            #line 29 ""
                    this.Write(",\n");

            #line default
            #line hidden

            #line 30 ""
                }

            #line default
            #line hidden

            #line 31 ""
                this.Write("    const ");

            #line default
            #line hidden

            #line 31 ""
                this.Write(this.ToStringHelper.ToStringWithCulture(Type(v)));

            #line default
            #line hidden

            #line 31 ""
                this.Write(" init_");

            #line default
            #line hidden

            #line 31 ""
                this.Write(this.ToStringHelper.ToStringWithCulture(v.Name));

            #line default
            #line hidden

            #line 31 ""
                this.Write(this.ToStringHelper.ToStringWithCulture(v == members.Last() ? "" : ","));

            #line default
            #line hidden

            #line 31 ""
                this.Write("\n");

            #line default
            #line hidden

            #line 32 ""
            }

            #line default
            #line hidden

            #line 33 ""
            this.Write(") {\n");

            #line default
            #line hidden

            #line 34 ""
            foreach (var bus in busses)
            {
            #line default
            #line hidden

            #line 35 ""
                this.Write("    bus_");

            #line default
            #line hidden

            #line 35 ""
                this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusNameToValidName(bus, RSP.Process)));

            #line default
            #line hidden

            #line 35 ""
                this.Write(" = p");

            #line default
            #line hidden

            #line 35 ""
                this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusNameToValidName(bus, RSP.Process)));

            #line default
            #line hidden

            #line 35 ""
                this.Write(";\n");

            #line default
            #line hidden

            #line 36 ""
            }

            #line default
            #line hidden

            #line 37 ""
            this.Write("\n");

            #line default
            #line hidden

            #line 38 ""
            foreach (var v in members)
            {
                var rt = RS.TypeScope.GetType(v);
                if (rt.IsArray)
                {
                    var eltype = rt.ElementName;


            #line default
            #line hidden

            #line 43 ""
                    this.Write("    size_");

            #line default
            #line hidden

            #line 43 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(v.Name));

            #line default
            #line hidden

            #line 43 ""
                    this.Write(" = init_size_");

            #line default
            #line hidden

            #line 43 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(v.Name));

            #line default
            #line hidden

            #line 43 ""
                    this.Write(";\n    ");

            #line default
            #line hidden

            #line 44 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(v.Name));

            #line default
            #line hidden

            #line 44 ""
                    this.Write(" = new ");

            #line default
            #line hidden

            #line 44 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(eltype));

            #line default
            #line hidden

            #line 44 ""
                    this.Write("[size_");

            #line default
            #line hidden

            #line 44 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(v.Name));

            #line default
            #line hidden

            #line 44 ""
                    this.Write("];\n    std::memcpy(");

            #line default
            #line hidden

            #line 45 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(v.Name));

            #line default
            #line hidden

            #line 45 ""
                    this.Write(", init_");

            #line default
            #line hidden

            #line 45 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(v.Name));

            #line default
            #line hidden

            #line 45 ""
                    this.Write(", size_");

            #line default
            #line hidden

            #line 45 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(v.Name));

            #line default
            #line hidden

            #line 45 ""
                    this.Write(" * sizeof(");

            #line default
            #line hidden

            #line 45 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(eltype));

            #line default
            #line hidden

            #line 45 ""
                    this.Write("));\n");

            #line default
            #line hidden

            #line 46 ""
                }
                else
                {
            #line default
            #line hidden

            #line 47 ""
                    this.Write("    ");

            #line default
            #line hidden

            #line 47 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(v.Name));

            #line default
            #line hidden

            #line 47 ""
                    this.Write(" = init_");

            #line default
            #line hidden

            #line 47 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(v.Name));

            #line default
            #line hidden

            #line 47 ""
                    this.Write(";\n");

            #line default
            #line hidden

            #line 48 ""
                }

            #line default
            #line hidden

            #line 49 ""
            }

            #line default
            #line hidden

            #line 50 ""
            this.Write("\n    // Insert additional initialization here\n    // #### USER-DATA-INIT-START\n  " +
                       "  // #### USER-DATA-INIT-END\n}\n\nvoid ");

            #line default
            #line hidden

            #line 56 ""
            this.Write(this.ToStringHelper.ToStringWithCulture(RSP.Process.Name));

            #line default
            #line hidden

            #line 56 ""
            this.Write("::onTick() {\n    // Insert additional pre- clock-tick code here\n    // #### USER-" +
                       "DATA-PRE-START\n    // #### USER-DATA-PRE-END\n\n");

            #line default
            #line hidden

            #line 61 ""
            foreach (var line in RS.Renderer.RenderMethod(RSP.Process.MainMethod))
            {
            #line default
            #line hidden

            #line 62 ""
                this.Write("    ");

            #line default
            #line hidden

            #line 62 ""
                this.Write(this.ToStringHelper.ToStringWithCulture(line));

            #line default
            #line hidden

            #line 62 ""
                this.Write("\n");

            #line default
            #line hidden

            #line 63 ""
            }

            #line default
            #line hidden

            #line 64 ""
            this.Write("\n    // Insert additional post- clock-tick code here\n    // #### USER-DATA-POST-S" +
                       "TART\n    // #### USER-DATA-POST-END\n}\n");

            #line default
            #line hidden

            #line 69 ""
            if (RSP.Process.Methods != null && RSP.Process.Methods.Any(x => !x.Ignore))
            {
            #line default
            #line hidden

            #line 70 ""
                this.Write("\n// Internal methods\n");

            #line default
            #line hidden

            #line 72 ""
                foreach (var s in RSP.Process.Methods.Where(x => !x.Ignore))
                {
            #line default
            #line hidden

            #line 73 ""

                    var rettype = (s.ReturnVariable == null || s.ReturnVariable.CecilType.IsSameTypeReference(typeof(void))) ? "void" : Type(s.ReturnVariable);


            #line default
            #line hidden

            #line 76 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(rettype));

            #line default
            #line hidden

            #line 76 ""
                    this.Write(" ");

            #line default
            #line hidden

            #line 76 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(RSP.Process.Name));

            #line default
            #line hidden

            #line 76 ""
                    this.Write("::");

            #line default
            #line hidden

            #line 76 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(s.Name));

            #line default
            #line hidden

            #line 76 ""
                    this.Write("(");

            #line default
            #line hidden

            #line 76 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(string.Join(", ", s.Parameters.Select(x => $"{Type(x)} {x.Name}"))));

            #line default
            #line hidden

            #line 76 ""
                    this.Write(") {\n");

            #line default
            #line hidden

            #line 77 ""
                    foreach (var line in RS.Renderer.RenderMethod(s))
                    {
            #line default
            #line hidden

            #line 78 ""
                        this.Write("    ");

            #line default
            #line hidden

            #line 78 ""
                        this.Write(this.ToStringHelper.ToStringWithCulture(line));

            #line default
            #line hidden

            #line 78 ""
                        this.Write("\n");

            #line default
            #line hidden

            #line 79 ""
                    }

            #line default
            #line hidden

            #line 80 ""
                    this.Write("}\n");

            #line default
            #line hidden

            #line 81 ""
                }

            #line default
            #line hidden

            #line 82 ""
            }

            #line default
            #line hidden
            return(this.GenerationEnvironment.ToString());
        }
Example #2
0
        public virtual string TransformText()
        {
            this.GenerationEnvironment = null;

            #line 1 ""
            this.Write("");

            #line default
            #line hidden

            #line 6 ""
            this.Write("#include <iostream>\n#include <fstream>\n#include <sstream>\n#include \"SystemTypes.h" +
                       "pp\"\n#include \"");

            #line default
            #line hidden

            #line 10 ""
            this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusDefinitionsFileName(Network)));

            #line default
            #line hidden

            #line 10 ""
            this.Write("\"\n#include \"");

            #line default
            #line hidden

            #line 11 ""
            this.Write(this.ToStringHelper.ToStringWithCulture(Naming.SharedDefinitionsFileName(Network)));

            #line default
            #line hidden

            #line 11 ""
            this.Write("\"\n\n");

            #line default
            #line hidden

            #line 13 ""
            foreach (var process in Network.Processes)
            {
            #line default
            #line hidden

            #line 14 ""
                this.Write("#include \"");

            #line default
            #line hidden

            #line 14 ""
                this.Write(this.ToStringHelper.ToStringWithCulture(process.Name));

            #line default
            #line hidden

            #line 14 ""
                this.Write(".hpp\"\n");

            #line default
            #line hidden

            #line 15 ""
            }

            #line default
            #line hidden

            #line 16 ""
            this.Write("\n// Insert additional includes and classes here\n// #### USER-DATA-INCLUDE-START\n/" +
                       "/ #### USER-DATA-INCLUDE-END\n\nclass ");

            #line default
            #line hidden

            #line 21 ""
            this.Write(this.ToStringHelper.ToStringWithCulture(Naming.AssemblyNameToFileName(Network)));

            #line default
            #line hidden

            #line 21 ""
            this.Write(" {\n\n// Insert additional variables and methods here\n// #### USER-VARIABLE-INCLUDE" +
                       "-START\n// #### USER-VARIABLE-INCLUDE-END\n\nprivate:\n\n    // Internal Busses\n");

            #line default
            #line hidden

            #line 30 ""
            foreach (var bus in Network.Busses.Where(x => !(x.IsTopLevelInput || x.IsTopLevelOutput)))
            {
            #line default
            #line hidden

            #line 31 ""
                this.Write("    ");

            #line default
            #line hidden

            #line 31 ""
                this.Write(this.ToStringHelper.ToStringWithCulture(bus.Name));

            #line default
            #line hidden

            #line 31 ""
                this.Write(" bus_");

            #line default
            #line hidden

            #line 31 ""
                this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusNameToValidName(bus)));

            #line default
            #line hidden

            #line 31 ""
                this.Write(";\n");

            #line default
            #line hidden

            #line 32 ""
            }

            #line default
            #line hidden

            #line 33 ""
            this.Write("\n    // Processes\n");

            #line default
            #line hidden

            #line 35 ""
            foreach (var process in Network.Processes)
            {
            #line default
            #line hidden

            #line 36 ""
                this.Write("    ");

            #line default
            #line hidden

            #line 36 ""
                this.Write(this.ToStringHelper.ToStringWithCulture(process.Name));

            #line default
            #line hidden

            #line 36 ""
                this.Write(" proc_");

            #line default
            #line hidden

            #line 36 ""
                this.Write(this.ToStringHelper.ToStringWithCulture(Naming.ProcessNameToValidName(process)));

            #line default
            #line hidden

            #line 36 ""
                this.Write(";\n");

            #line default
            #line hidden

            #line 37 ""
            }

            #line default
            #line hidden

            #line 38 ""
            this.Write("\n    // The trace input file, if any\n    std::ifstream* trace_input;\n\n    // The " +
                       "current trace input line\n    std::string input_line;\n\n    // The currently simul" +
                       "ated cycle\n    size_t cycle;\n\npublic:\n    // Top level input/output busses\n");

            #line default
            #line hidden

            #line 50 ""
            foreach (var bus in Network.Busses.Where(x => (x.IsTopLevelInput || x.IsTopLevelOutput)))
            {
            #line default
            #line hidden

            #line 51 ""
                this.Write("    ");

            #line default
            #line hidden

            #line 51 ""
                this.Write(this.ToStringHelper.ToStringWithCulture(bus.Name));

            #line default
            #line hidden

            #line 51 ""
                this.Write(" bus_");

            #line default
            #line hidden

            #line 51 ""
                this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusNameToValidName(bus)));

            #line default
            #line hidden

            #line 51 ""
                this.Write(";\n");

            #line default
            #line hidden

            #line 52 ""
            }

            #line default
            #line hidden

            #line 53 ""
            this.Write("\n    // Default constructor\n    ");

            #line default
            #line hidden

            #line 55 ""
            this.Write(this.ToStringHelper.ToStringWithCulture(Naming.AssemblyNameToFileName(Network)));

            #line default
            #line hidden

            #line 55 ""
            this.Write(@"();

    // Helper method for running a complete simulation from a
    // trace file
    size_t RunSimulation(const char* inputfile);

    // Opens the file and prepares the input for driving signals
    // and post simulation verification
    void LoadTraceInput(const char* inputfile);

    // Drives the input signals with the values found in the
    // tracefile passed to the constructor
    bool DriveFromTraceInput();

    // Prepares the simulation for the next tick
    void FinishCycle();

    // Performs a single iteration of the program
    void OnTick();

    // Performs post-tick verification of all signals
    void VerifyTrace();

    // Shuts down the simulation, closing all open files
    void Stop();

    // Gets the current cycle
    size_t Cycle() { return cycle; }
};");

            #line default
            #line hidden
            return(this.GenerationEnvironment.ToString());
        }
Example #3
0
        public virtual string TransformText()
        {
            this.GenerationEnvironment = null;

            #line 1 ""
            this.Write("");

            #line default
            #line hidden

            #line 7 ""
            this.Write("#ifndef SME_");

            #line default
            #line hidden

            #line 7 ""
            this.Write(this.ToStringHelper.ToStringWithCulture(RSP.Process.Name.ToUpper()));

            #line default
            #line hidden

            #line 7 ""
            this.Write("_HPP\n#define SME_");

            #line default
            #line hidden

            #line 8 ""
            this.Write(this.ToStringHelper.ToStringWithCulture(RSP.Process.Name.ToUpper()));

            #line default
            #line hidden

            #line 8 ""
            this.Write("_HPP\n\n#include \"SystemTypes.hpp\"\n#include \"");

            #line default
            #line hidden

            #line 11 ""
            this.Write(this.ToStringHelper.ToStringWithCulture(Naming.SharedDefinitionsFileName(Network)));

            #line default
            #line hidden

            #line 11 ""
            this.Write("\"\n#include \"");

            #line default
            #line hidden

            #line 12 ""
            this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusDefinitionsFileName(Network)));

            #line default
            #line hidden

            #line 12 ""
            this.Write("\"\n\n");

            #line default
            #line hidden

            #line 14 ""


            var busses  = RSP.Process.InputBusses.Concat(RSP.Process.OutputBusses).Concat(RSP.Process.InternalBusses).Distinct().OrderBy(x => x.Name).ToArray();
            var members = RSP.Process.SharedVariables.Cast <DataElement>().Union(RSP.Process.SharedSignals).ToArray();


            #line default
            #line hidden

            #line 19 ""
            this.Write("\nclass ");

            #line default
            #line hidden

            #line 20 ""
            this.Write(this.ToStringHelper.ToStringWithCulture(RSP.Process.Name));

            #line default
            #line hidden

            #line 20 ""
            this.Write(" : public IProcess {\n    // Insert additional private variables and methods here\n" +
                       "    // #### USER-DATA-PRIVATE-START\n    // #### USER-DATA-PRIVATE-END\n\nprivate:\n" +
                       "");

            #line default
            #line hidden

            #line 26 ""
            if (RSP.Process.SharedVariables.Any())
            {
            #line default
            #line hidden

            #line 27 ""
                this.Write("    // Shared variables\n");

            #line default
            #line hidden

            #line 28 ""
                foreach (var v in RSP.Process.SharedVariables)
                {
            #line default
            #line hidden

            #line 29 ""
                    this.Write("    ");

            #line default
            #line hidden

            #line 29 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(Type(v)));

            #line default
            #line hidden

            #line 29 ""
                    this.Write(" ");

            #line default
            #line hidden

            #line 29 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(v.Name));

            #line default
            #line hidden

            #line 29 ""
                    this.Write(";\n");

            #line default
            #line hidden

            #line 30 ""
                    if (v.CecilType.IsArrayType())
                    {
            #line default
            #line hidden

            #line 31 ""
                        this.Write("    size_t size_");

            #line default
            #line hidden

            #line 31 ""
                        this.Write(this.ToStringHelper.ToStringWithCulture(v.Name));

            #line default
            #line hidden

            #line 31 ""
                        this.Write(";\n");

            #line default
            #line hidden

            #line 32 ""
                    }

            #line default
            #line hidden

            #line 33 ""
                }

            #line default
            #line hidden

            #line 34 ""
                this.Write("\n");

            #line default
            #line hidden

            #line 35 ""
            }

            #line default
            #line hidden

            #line 36 ""
            if (RSP.Process.SharedSignals.Any())
            {
            #line default
            #line hidden

            #line 37 ""
                this.Write("    // Shared signals\n");

            #line default
            #line hidden

            #line 38 ""
                foreach (var v in RSP.Process.SharedSignals)
                {
            #line default
            #line hidden

            #line 39 ""
                    this.Write("    ");

            #line default
            #line hidden

            #line 39 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(Type(v)));

            #line default
            #line hidden

            #line 39 ""
                    this.Write(" ");

            #line default
            #line hidden

            #line 39 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(v.Name));

            #line default
            #line hidden

            #line 39 ""
                    this.Write(";\n");

            #line default
            #line hidden

            #line 40 ""
                    if (v.CecilType.IsArrayType())
                    {
            #line default
            #line hidden

            #line 41 ""
                        this.Write("    size_t size_");

            #line default
            #line hidden

            #line 41 ""
                        this.Write(this.ToStringHelper.ToStringWithCulture(v.Name));

            #line default
            #line hidden

            #line 41 ""
                        this.Write(";\n");

            #line default
            #line hidden

            #line 42 ""
                    }

            #line default
            #line hidden

            #line 43 ""
                }

            #line default
            #line hidden

            #line 44 ""
                this.Write("\n");

            #line default
            #line hidden

            #line 45 ""
            }

            #line default
            #line hidden

            #line 46 ""
            this.Write("    // Bus pointers\n");

            #line default
            #line hidden

            #line 47 ""
            foreach (var bus in busses)
            {
            #line default
            #line hidden

            #line 48 ""
                this.Write("    ");

            #line default
            #line hidden

            #line 48 ""
                this.Write(this.ToStringHelper.ToStringWithCulture(bus.Name));

            #line default
            #line hidden

            #line 48 ""
                this.Write("* bus_");

            #line default
            #line hidden

            #line 48 ""
                this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusNameToValidName(bus, RSP.Process)));

            #line default
            #line hidden

            #line 48 ""
                this.Write(";\n");

            #line default
            #line hidden

            #line 49 ""
            }

            #line default
            #line hidden

            #line 50 ""
            this.Write("\n");

            #line default
            #line hidden

            #line 51 ""
            if (RSP.Process.Methods != null && RSP.Process.Methods.Any(x => !x.Ignore))
            {
            #line default
            #line hidden

            #line 52 ""
                this.Write("    // Internal methods\n");

            #line default
            #line hidden

            #line 53 ""
                foreach (var s in RSP.Process.Methods.Where(x => !x.Ignore))
                {
            #line default
            #line hidden

            #line 54 ""

                    var rettype = (s.ReturnVariable == null || s.ReturnVariable.CecilType.IsSameTypeReference(typeof(void))) ? "void" : Type(s.ReturnVariable);


            #line default
            #line hidden

            #line 57 ""
                    this.Write("    ");

            #line default
            #line hidden

            #line 57 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(rettype));

            #line default
            #line hidden

            #line 57 ""
                    this.Write(" ");

            #line default
            #line hidden

            #line 57 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(s.Name));

            #line default
            #line hidden

            #line 57 ""
                    this.Write("(");

            #line default
            #line hidden

            #line 57 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(string.Join(", ", s.Parameters.Select(x => $"{Type(x)} {x.Name}"))));

            #line default
            #line hidden

            #line 57 ""
                    this.Write(");\n");

            #line default
            #line hidden

            #line 58 ""
                }

            #line default
            #line hidden

            #line 59 ""
            }

            #line default
            #line hidden

            #line 60 ""
            this.Write("\npublic:\n    ");

            #line default
            #line hidden

            #line 62 ""
            this.Write(this.ToStringHelper.ToStringWithCulture(RSP.Process.Name));

            #line default
            #line hidden

            #line 62 ""
            this.Write("(\n");

            #line default
            #line hidden

            #line 63 ""
            foreach (var bus in busses)
            {
            #line default
            #line hidden

            #line 64 ""
                this.Write("        ");

            #line default
            #line hidden

            #line 64 ""
                this.Write(this.ToStringHelper.ToStringWithCulture(bus.Name));

            #line default
            #line hidden

            #line 64 ""
                this.Write("* p");

            #line default
            #line hidden

            #line 64 ""
                this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusNameToValidName(bus, RSP.Process)));

            #line default
            #line hidden

            #line 64 ""
                this.Write(this.ToStringHelper.ToStringWithCulture((bus == busses.Last() && members.Length == 0) ? "" : ","));

            #line default
            #line hidden

            #line 64 ""
                this.Write("\n");

            #line default
            #line hidden

            #line 65 ""
            }

            #line default
            #line hidden

            #line 66 ""
            foreach (var v in members)
            {
                var rt = RS.TypeScope.GetType(v);
                if (rt.IsArray)
                {
            #line default
            #line hidden

            #line 69 ""
                    this.Write("        size_t init_size_");

            #line default
            #line hidden

            #line 69 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(v.Name));

            #line default
            #line hidden

            #line 69 ""
                    this.Write(",\n");

            #line default
            #line hidden

            #line 70 ""
                }

            #line default
            #line hidden

            #line 71 ""
                this.Write("        const ");

            #line default
            #line hidden

            #line 71 ""
                this.Write(this.ToStringHelper.ToStringWithCulture(Type(v)));

            #line default
            #line hidden

            #line 71 ""
                this.Write(" init_");

            #line default
            #line hidden

            #line 71 ""
                this.Write(this.ToStringHelper.ToStringWithCulture(v.Name));

            #line default
            #line hidden

            #line 71 ""
                this.Write(this.ToStringHelper.ToStringWithCulture(v == members.Last() ? "" : ","));

            #line default
            #line hidden

            #line 71 ""
                this.Write("\n");

            #line default
            #line hidden

            #line 72 ""
            }

            #line default
            #line hidden

            #line 73 ""
            this.Write("    );\n\n    void onTick();\n};\n\n#endif /* SME_");

            #line default
            #line hidden

            #line 78 ""
            this.Write(this.ToStringHelper.ToStringWithCulture(RSP.Process.Name.ToUpper()));

            #line default
            #line hidden

            #line 78 ""
            this.Write("_HPP */\n");

            #line default
            #line hidden
            return(this.GenerationEnvironment.ToString());
        }
        public virtual string TransformText()
        {
            this.GenerationEnvironment = null;

            #line 1 ""
            this.Write("");

            #line default
            #line hidden

            #line 6 ""
            this.Write("#include \"");

            #line default
            #line hidden

            #line 6 ""
            this.Write(this.ToStringHelper.ToStringWithCulture(Naming.SimulatorFileName(Network)));

            #line default
            #line hidden

            #line 6 ""
            this.Write(".hpp\"\n\n// The names of all signals\nstd::string ");

            #line default
            #line hidden

            #line 9 ""
            this.Write(this.ToStringHelper.ToStringWithCulture(Naming.AssemblyNameToFileName(Network)));

            #line default
            #line hidden

            #line 9 ""
            this.Write("_SIGNAL_NAMES[] = {\n");

            #line default
            #line hidden

            #line 10 ""
            foreach (var signal in RS.DriverSignals.Concat(RS.VerifySignals))
            {
                var cpptype = RS.TypeScope.GetType(signal);
                if (cpptype.IsArray)
                {
                    var eltype = cpptype.ElementName;
                    var length = (int)RS.GetArrayLength(signal).DefaultValue;
                    for (var i = 0; i < length; i++)
                    {
            #line default
            #line hidden

            #line 17 ""
                        this.Write("    \"");

            #line default
            #line hidden

            #line 17 ""
                        this.Write(this.ToStringHelper.ToStringWithCulture(RS.TestBenchSignalName(signal)));

            #line default
            #line hidden

            #line 17 ""
                        this.Write("(");

            #line default
            #line hidden

            #line 17 ""
                        this.Write(this.ToStringHelper.ToStringWithCulture(i));

            #line default
            #line hidden

            #line 17 ""
                        this.Write(")\",\n");

            #line default
            #line hidden

            #line 18 ""
                    }

            #line default
            #line hidden

            #line 19 ""
                }
                else
                {
            #line default
            #line hidden

            #line 20 ""
                    this.Write("    \"");

            #line default
            #line hidden

            #line 20 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(RS.TestBenchSignalName(signal)));

            #line default
            #line hidden

            #line 20 ""
                    this.Write("\",\n");

            #line default
            #line hidden

            #line 21 ""
                }

            #line default
            #line hidden

            #line 22 ""
            }

            #line default
            #line hidden

            #line 23 ""
            this.Write("};\n\n");

            #line default
            #line hidden

            #line 25 ""
            foreach (var process in Network.Processes)
            {
                var members = process
                              .SharedVariables.Cast <AST.DataElement>()
                              .Union(process.SharedSignals)
                              //.Where(x => RS.TypeScope.GetType(x).IsArray)
                              .Where(x => (x.DefaultValue is SME.AST.ArrayCreateExpression) || (x.DefaultValue is Array));
                foreach (var v in members)
                {
                    var rt       = RS.TypeScope.GetType(v);
                    var eltype   = rt.ElementName;
                    var arraylen = RS.GetArrayLength(v).DefaultValue;


            #line default
            #line hidden

            #line 36 ""
                    this.Write("const ");

            #line default
            #line hidden

            #line 36 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(eltype));

            #line default
            #line hidden

            #line 36 ""
                    this.Write(" init_");

            #line default
            #line hidden

            #line 36 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(Naming.ProcessNameToValidName(process)));

            #line default
            #line hidden

            #line 36 ""
                    this.Write("_");

            #line default
            #line hidden

            #line 36 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(Naming.ToValidName(v.Name)));

            #line default
            #line hidden

            #line 36 ""
                    this.Write("[");

            #line default
            #line hidden

            #line 36 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(arraylen));

            #line default
            #line hidden

            #line 36 ""
                    this.Write("] = ");

            #line default
            #line hidden

            #line 36 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(RS.Renderer.GetInitializer(v)));

            #line default
            #line hidden

            #line 36 ""
                    this.Write(";\n");

            #line default
            #line hidden

            #line 37 ""
                }

            #line default
            #line hidden

            #line 38 ""
            }

            #line default
            #line hidden

            #line 39 ""
            this.Write("\n\n");

            #line default
            #line hidden

            #line 41 ""
            this.Write(this.ToStringHelper.ToStringWithCulture(Naming.AssemblyNameToFileName(Network)));

            #line default
            #line hidden

            #line 41 ""
            this.Write("::");

            #line default
            #line hidden

            #line 41 ""
            this.Write(this.ToStringHelper.ToStringWithCulture(Naming.AssemblyNameToFileName(Network)));

            #line default
            #line hidden

            #line 41 ""
            this.Write("() \n    :\n");

            #line default
            #line hidden

            #line 43 ""
            foreach (var bus in Network.Busses)
            {
            #line default
            #line hidden

            #line 44 ""
                this.Write("        bus_");

            #line default
            #line hidden

            #line 44 ""
                this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusNameToValidName(bus)));

            #line default
            #line hidden

            #line 44 ""
                this.Write("(),\n");

            #line default
            #line hidden

            #line 45 ""
            }

            #line default
            #line hidden

            #line 46 ""
            foreach (var process in Network.Processes)
            {
                var busses  = process.InputBusses.Concat(process.OutputBusses).Concat(process.InternalBusses).Distinct().OrderBy(x => x.Name).ToArray();
                var members = process.SharedVariables.Cast <AST.DataElement>().Union(process.SharedSignals).ToArray();


            #line default
            #line hidden

            #line 51 ""
                this.Write("        proc_");

            #line default
            #line hidden

            #line 51 ""
                this.Write(this.ToStringHelper.ToStringWithCulture(Naming.ProcessNameToValidName(process)));

            #line default
            #line hidden

            #line 51 ""
                this.Write("(\n");

            #line default
            #line hidden

            #line 52 ""
                foreach (var bus in busses)
                {
            #line default
            #line hidden

            #line 53 ""
                    this.Write("            &bus_");

            #line default
            #line hidden

            #line 53 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusNameToValidName(bus)));

            #line default
            #line hidden

            #line 53 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture((bus == busses.Last() & members.Length == 0) ? "" : ", "));

            #line default
            #line hidden

            #line 53 ""
                    this.Write("\n");

            #line default
            #line hidden

            #line 54 ""
                }

            #line default
            #line hidden

            #line 55 ""
                foreach (var v in members)
                {
                    var initializer = RS.Renderer.GetInitializer(v);
                    if (!string.IsNullOrWhiteSpace(initializer))
                    {
                        var rt = RS.TypeScope.GetType(v);
                        if (rt.IsArray)
                        {
                            var eltype   = rt.ElementName;
                            var arraylen = RS.GetArrayLength(v).DefaultValue;



            #line default
            #line hidden

            #line 64 ""
                            this.Write("            ");

            #line default
            #line hidden

            #line 64 ""
                            this.Write(this.ToStringHelper.ToStringWithCulture(arraylen));

            #line default
            #line hidden

            #line 64 ""
                            this.Write(",\n");

            #line default
            #line hidden

            #line 65 ""


                            if ((v.DefaultValue is SME.AST.ArrayCreateExpression) || v.DefaultValue is Array)
                            {
            #line default
            #line hidden

            #line 68 ""
                                this.Write("            init_");

            #line default
            #line hidden

            #line 68 ""
                                this.Write(this.ToStringHelper.ToStringWithCulture(Naming.ProcessNameToValidName(process)));

            #line default
            #line hidden

            #line 68 ""
                                this.Write("_");

            #line default
            #line hidden

            #line 68 ""
                                this.Write(this.ToStringHelper.ToStringWithCulture(Naming.ToValidName(v.Name)));

            #line default
            #line hidden

            #line 68 ""
                                this.Write(this.ToStringHelper.ToStringWithCulture(v == members.Last() ? "" : ","));

            #line default
            #line hidden

            #line 68 ""
                                this.Write("\n");

            #line default
            #line hidden

            #line 69 ""
                            }
                            else
                            {
            #line default
            #line hidden

            #line 70 ""
                                this.Write("            new ");

            #line default
            #line hidden

            #line 70 ""
                                this.Write(this.ToStringHelper.ToStringWithCulture(eltype));

            #line default
            #line hidden

            #line 70 ""
                                this.Write("[");

            #line default
            #line hidden

            #line 70 ""
                                this.Write(this.ToStringHelper.ToStringWithCulture(arraylen));

            #line default
            #line hidden

            #line 70 ""
                                this.Write("]()");

            #line default
            #line hidden

            #line 70 ""
                                this.Write(this.ToStringHelper.ToStringWithCulture(v == members.Last() ? "" : ","));

            #line default
            #line hidden

            #line 70 ""
                                this.Write("\n");

            #line default
            #line hidden

            #line 71 ""
                            }

            #line default
            #line hidden

            #line 72 ""
                        }
                        else
                        {
            #line default
            #line hidden

            #line 73 ""
                            this.Write("            ");

            #line default
            #line hidden

            #line 73 ""
                            this.Write(this.ToStringHelper.ToStringWithCulture(initializer));

            #line default
            #line hidden

            #line 73 ""
                            this.Write(this.ToStringHelper.ToStringWithCulture(v == members.Last() ? "" : ","));

            #line default
            #line hidden

            #line 73 ""
                            this.Write("\n");

            #line default
            #line hidden

            #line 74 ""
                        }

            #line default
            #line hidden

            #line 75 ""
                    }

            #line default
            #line hidden

            #line 76 ""
                }

            #line default
            #line hidden

            #line 77 ""
                this.Write("        ),\n");

            #line default
            #line hidden

            #line 78 ""
            }

            #line default
            #line hidden

            #line 79 ""
            this.Write("        trace_input(NULL),\n        input_line(),\n        cycle(0)\n{\n\n}\n\nsize_t ");

            #line default
            #line hidden

            #line 86 ""
            this.Write(this.ToStringHelper.ToStringWithCulture(Naming.AssemblyNameToFileName(Network)));

            #line default
            #line hidden

            #line 86 ""
            this.Write(@"::RunSimulation(const char* inputfile)
{
    LoadTraceInput(inputfile);

    // Ignore the reset cycle
    DriveFromTraceInput();

    while(true) {
        if (!DriveFromTraceInput()) {
            size_t res = cycle;
            Stop();
            return res;
        }
        OnTick();
        VerifyTrace();
        FinishCycle();
    }
}

void ");

            #line default
            #line hidden

            #line 105 ""
            this.Write(this.ToStringHelper.ToStringWithCulture(Naming.AssemblyNameToFileName(Network)));

            #line default
            #line hidden

            #line 105 ""
            this.Write(@"::LoadTraceInput(const char* inputfile)
{
    if (trace_input != NULL)
       throw MessageException(""Already have an input trace file open"");

    // Open the trace file and validate the headers
    trace_input = new std::ifstream(inputfile);
    if (trace_input->bad()) {
        trace_input->close();
        throw MessageException(""Trace input file not found, or not able to open"");
    }

    if (!std::getline(*trace_input, input_line)) {
        throw MessageException(""Trace input file was empty"");
    }

    if (cycle != 0) {
        throw MessageException(""Cannot load input file after the simulation has started"");
    }

    std::string token;
    std::istringstream headerlinestream(input_line);
    size_t field = 0;
    while(std::getline(headerlinestream, token, ',')) {
        if (token.compare(");

            #line default
            #line hidden

            #line 129 ""
            this.Write(this.ToStringHelper.ToStringWithCulture(Naming.AssemblyNameToFileName(Network)));

            #line default
            #line hidden

            #line 129 ""
            this.Write("_SIGNAL_NAMES[field]) != 0) {\n\n            std::stringstream sstm;\n            ss" +
                       "tm << \"Field #\" << field << \" should be named \" << ");

            #line default
            #line hidden

            #line 132 ""
            this.Write(this.ToStringHelper.ToStringWithCulture(Naming.AssemblyNameToFileName(Network)));

            #line default
            #line hidden

            #line 132 ""
            this.Write("_SIGNAL_NAMES[field] << \" but is named \" << token << \", the trace file cannot be " +
                       "used\";\n            throw MessageException(sstm.str());\n        }\n        field++" +
                       ";\n    }\n\n    cycle = 0;\n}\n\n");

            #line default
            #line hidden

            #line 141 ""
            var driver_signal_count = 0;

            #line default
            #line hidden

            #line 142 ""
            this.Write("\nbool ");

            #line default
            #line hidden

            #line 143 ""
            this.Write(this.ToStringHelper.ToStringWithCulture(Naming.AssemblyNameToFileName(Network)));

            #line default
            #line hidden

            #line 143 ""
            this.Write(@"::DriveFromTraceInput()
{
    if (trace_input == NULL) {
        throw MessageException(""Trace input file is not loaded"");
    }

    if (!std::getline(*trace_input, input_line)) {
        return false;
    }

    size_t i;
    std::string token;
    std::istringstream valuestream(input_line);
    size_t field = 0;

");

            #line default
            #line hidden

            #line 158 ""
            foreach (var signal in RS.DriverSignals)
            {
                var cpptype = RS.TypeScope.GetType(signal);
                if (cpptype.IsArray)
                {
                    var eltype = cpptype.ElementName;
                    var length = (int)RS.GetArrayLength(signal).DefaultValue;
                    driver_signal_count += length;


            #line default
            #line hidden

            #line 165 ""
                    this.Write("    for (i = 0; i < ");

            #line default
            #line hidden

            #line 165 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(length));

            #line default
            #line hidden

            #line 165 ""
                    this.Write("; i++) {\n        if (!std::getline(valuestream, token, \',\')) {\n            std::s" +
                               "tringstream sstm;\n            sstm << \"Unexpected end-of-line in cycle \" << cycl" +
                               "e << \", field \" << field << \", ");

            #line default
            #line hidden

            #line 168 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(signal.Name));

            #line default
            #line hidden

            #line 168 ""
                    this.Write("[\" << i << \"]\" << std::endl;\n            throw MessageException(sstm.str());\n    " +
                               "    }\n        if (token.compare(\"U\") != 0)\n            bus_");

            #line default
            #line hidden

            #line 172 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusNameToValidName(signal.Parent as AST.Bus)));

            #line default
            #line hidden

            #line 172 ""
                    this.Write(".");

            #line default
            #line hidden

            #line 172 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(signal.Name));

            #line default
            #line hidden

            #line 172 ""
                    this.Write("(i, parse_");

            #line default
            #line hidden

            #line 172 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(eltype));

            #line default
            #line hidden

            #line 172 ""
                    this.Write("(token));            \n        field++;\n    }\n");

            #line default
            #line hidden

            #line 175 ""
                }
                else
                {
                    driver_signal_count++;


            #line default
            #line hidden

            #line 179 ""
                    this.Write("    if (!std::getline(valuestream, token, \',\')) {\n        std::stringstream sstm;" +
                               "\n        sstm << \"Unexpected end-of-line in cycle \" << cycle << \", field \" << fi" +
                               "eld << \", ");

            #line default
            #line hidden

            #line 181 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(signal.Name));

            #line default
            #line hidden

            #line 181 ""
                    this.Write("[\" << i << \"]\" << std::endl;\n        throw MessageException(sstm.str());\n    }\n  " +
                               "  if (token.compare(\"U\") != 0)\n        bus_");

            #line default
            #line hidden

            #line 185 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusNameToValidName(signal.Parent as AST.Bus)));

            #line default
            #line hidden

            #line 185 ""
                    this.Write(".");

            #line default
            #line hidden

            #line 185 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(signal.Name));

            #line default
            #line hidden

            #line 185 ""
                    this.Write("(parse_");

            #line default
            #line hidden

            #line 185 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(RS.TypeScope.GetType(signal).Name));

            #line default
            #line hidden

            #line 185 ""
                    this.Write("(token));\n    field++;\n");

            #line default
            #line hidden

            #line 187 ""
                }

            #line default
            #line hidden

            #line 188 ""
                this.Write("\n");

            #line default
            #line hidden

            #line 189 ""
            }

            #line default
            #line hidden

            #line 190 ""
            this.Write("\n    return true;\n}\n\nvoid ");

            #line default
            #line hidden

            #line 194 ""
            this.Write(this.ToStringHelper.ToStringWithCulture(Naming.AssemblyNameToFileName(Network)));

            #line default
            #line hidden

            #line 194 ""
            this.Write("::FinishCycle() \n{\n    cycle++;\n");

            #line default
            #line hidden

            #line 197 ""
            if (Network.Busses.Any(x => x.IsClocked))
            {
            #line default
            #line hidden

            #line 198 ""
                this.Write("        // Propagate clocked busses\n");

            #line default
            #line hidden

            #line 199 ""
                foreach (var bus in Network.Busses.Where(x => x.IsClocked))
                {
            #line default
            #line hidden

            #line 200 ""
                    this.Write("        bus_");

            #line default
            #line hidden

            #line 200 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(bus.Name));

            #line default
            #line hidden

            #line 200 ""
                    this.Write(".Propagate();\n");

            #line default
            #line hidden

            #line 201 ""
                }

            #line default
            #line hidden

            #line 202 ""
            }

            #line default
            #line hidden

            #line 203 ""
            this.Write("}\n\nvoid ");

            #line default
            #line hidden

            #line 205 ""
            this.Write(this.ToStringHelper.ToStringWithCulture(Naming.AssemblyNameToFileName(Network)));

            #line default
            #line hidden

            #line 205 ""
            this.Write("::OnTick()\n{\n\n");

            #line default
            #line hidden

            #line 208 ""
            foreach (var p in Network.Processes.Where(x => x.IsClocked).Distinct())
            {
            #line default
            #line hidden

            #line 209 ""
                this.Write("    proc_");

            #line default
            #line hidden

            #line 209 ""
                this.Write(this.ToStringHelper.ToStringWithCulture(Naming.ProcessNameToValidName(p)));

            #line default
            #line hidden

            #line 209 ""
                this.Write(".onTick();\n");

            #line default
            #line hidden

            #line 210 ""
            }

            #line default
            #line hidden

            #line 211 ""
            foreach (var b in Network.Busses.Where(x => x.IsClocked).Distinct())
            {
            #line default
            #line hidden

            #line 212 ""
                this.Write("    bus_");

            #line default
            #line hidden

            #line 212 ""
                this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusNameToValidName(b)));

            #line default
            #line hidden

            #line 212 ""
                this.Write(".propagate_signals();\n");

            #line default
            #line hidden

            #line 213 ""
            }

            #line default
            #line hidden

            #line 214 ""
            this.Write("\n\n");

            #line default
            #line hidden

            #line 216 ""
            foreach (var n in Graph.ExecutionPlan)
            {
                var pn = GetProcess(n.Item);
                if (pn != null && !pn.IsClocked)
                {
            #line default
            #line hidden

            #line 220 ""
                    this.Write("    proc_");

            #line default
            #line hidden

            #line 220 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(Naming.ProcessNameToValidName(pn)));

            #line default
            #line hidden

            #line 220 ""
                    this.Write(".onTick();\n");

            #line default
            #line hidden

            #line 221 ""
                }

            #line default
            #line hidden

            #line 222 ""
                foreach (var b in n.Item.OutputBusses.Distinct())
                {
            #line default
            #line hidden

            #line 223 ""
                    this.Write("    bus_");

            #line default
            #line hidden

            #line 223 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusNameToValidName(GetBus(b))));

            #line default
            #line hidden

            #line 223 ""
                    this.Write(".forward_signals();\n");

            #line default
            #line hidden

            #line 224 ""
                }

            #line default
            #line hidden

            #line 225 ""
                foreach (var b in n.PropagateAfter)
                {
            #line default
            #line hidden

            #line 226 ""
                    this.Write("    bus_");

            #line default
            #line hidden

            #line 226 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusNameToValidName(GetBus(b))));

            #line default
            #line hidden

            #line 226 ""
                    this.Write(".propagate_signals();\n");

            #line default
            #line hidden

            #line 227 ""
                }

            #line default
            #line hidden

            #line 228 ""
                foreach (var b in n.Item.InternalBusses)
                {
            #line default
            #line hidden

            #line 229 ""
                    this.Write("    bus_");

            #line default
            #line hidden

            #line 229 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusNameToValidName(GetBus(b))));

            #line default
            #line hidden

            #line 229 ""
                    this.Write(".forward_signals();\n    bus_");

            #line default
            #line hidden

            #line 230 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusNameToValidName(GetBus(b))));

            #line default
            #line hidden

            #line 230 ""
                    this.Write(".propagate_signals();\n");

            #line default
            #line hidden

            #line 231 ""
                }

            #line default
            #line hidden

            #line 232 ""
            }

            #line default
            #line hidden

            #line 233 ""
            this.Write("}\n\nvoid ");

            #line default
            #line hidden

            #line 235 ""
            this.Write(this.ToStringHelper.ToStringWithCulture(Naming.AssemblyNameToFileName(Network)));

            #line default
            #line hidden

            #line 235 ""
            this.Write("::VerifyTrace()\n{\n    if (trace_input == NULL) {\n        throw MessageException(\"" +
                       "Trace input file is not loaded\");\n    }\n\n    size_t i;\n    size_t field = 0;\n   " +
                       " std::string token;\n    std::istringstream valuestream(input_line);\n\n    // Forw" +
                       "ard past the ");

            #line default
            #line hidden

            #line 246 ""
            this.Write(this.ToStringHelper.ToStringWithCulture(driver_signal_count));

            #line default
            #line hidden

            #line 246 ""
            this.Write(" signals\n    for(i = 0; i < ");

            #line default
            #line hidden

            #line 247 ""
            this.Write(this.ToStringHelper.ToStringWithCulture(driver_signal_count));

            #line default
            #line hidden

            #line 247 ""
            this.Write("; i++) {\n        if (!std::getline(valuestream, token, \',\')) {\n            throw " +
                       "MessageException(\"Unexpected end-of-stream\");\n        }\n        field++;\n    }\n\n" +
                       "    bool source_is_undef;\n\n");

            #line default
            #line hidden

            #line 256 ""
            foreach (var signal in RS.VerifySignals)
            {
                var cpptype  = RS.TypeScope.GetType(signal);
                var typecast = cpptype.Name == "system_uint8" ? "(int)" : "";
                if (cpptype.IsArray)
                {
                    typecast = cpptype.ElementName == "system_uint8" ? "(int)" : "";
                    var eltype = cpptype.ElementName;
                    var length = (int)RS.GetArrayLength(signal).DefaultValue;


            #line default
            #line hidden

            #line 264 ""
                    this.Write("    for (i = 0; i < ");

            #line default
            #line hidden

            #line 264 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(length));

            #line default
            #line hidden

            #line 264 ""
                    this.Write(@"; i++) {
        if (!std::getline(valuestream, token, ',')) {
            std::stringstream sstm;
            sstm << ""Unexpected end-of-line in cycle "" << cycle << "", field "" << field << std::endl;
            throw MessageException(sstm.str());
        }

        source_is_undef = false;
        try {
            ");

            #line default
            #line hidden

            #line 273 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(eltype));

            #line default
            #line hidden

            #line 273 ""
                    this.Write(" tmpval = bus_");

            #line default
            #line hidden

            #line 273 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusNameToValidName(signal.Parent as AST.Bus)));

            #line default
            #line hidden

            #line 273 ""
                    this.Write(".");

            #line default
            #line hidden

            #line 273 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(signal.Name));

            #line default
            #line hidden

            #line 273 ""
                    this.Write("(i);\n        } catch (InvalidReadException e) {\n            source_is_undef = tru" +
                               "e;\n        }\n\n        if (token.compare(\"U\") == 0 && source_is_undef) {\n        " +
                               " // Don\'t care\n        } else if (token.compare(\"U\") != 0 && bus_");

            #line default
            #line hidden

            #line 280 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusNameToValidName(signal.Parent as AST.Bus)));

            #line default
            #line hidden

            #line 280 ""
                    this.Write(".");

            #line default
            #line hidden

            #line 280 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(signal.Name));

            #line default
            #line hidden

            #line 280 ""
                    this.Write("(i) != parse_");

            #line default
            #line hidden

            #line 280 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(eltype));

            #line default
            #line hidden

            #line 280 ""
                    this.Write("(token)) {\n            std::stringstream sstm;\n            sstm << \"Error in cycl" +
                               "e \" << cycle << std::endl;\n            sstm << \"Expected value \" << ");

            #line default
            #line hidden

            #line 283 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(typecast));

            #line default
            #line hidden

            #line 283 ""
                    this.Write("parse_");

            #line default
            #line hidden

            #line 283 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(eltype));

            #line default
            #line hidden

            #line 283 ""
                    this.Write("(token) << \", but got \" << ");

            #line default
            #line hidden

            #line 283 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(typecast));

            #line default
            #line hidden

            #line 283 ""
                    this.Write("bus_");

            #line default
            #line hidden

            #line 283 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusNameToValidName(signal.Parent as AST.Bus)));

            #line default
            #line hidden

            #line 283 ""
                    this.Write(".");

            #line default
            #line hidden

            #line 283 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(signal.Name));

            #line default
            #line hidden

            #line 283 ""
                    this.Write("(i) << \" for field \" << ");

            #line default
            #line hidden

            #line 283 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(Naming.AssemblyNameToFileName(Network)));

            #line default
            #line hidden

            #line 283 ""
                    this.Write("_SIGNAL_NAMES[field] << \" (raw: \" << token << \")\" << std::endl;\n            throw" +
                               " MessageException(sstm.str());\n        }\n        field++;\n    }\n\n");

            #line default
            #line hidden

            #line 289 ""
                }
                else
                {
            #line default
            #line hidden

            #line 290 ""
                    this.Write(@"    if (!std::getline(valuestream, token, ',')) {
        std::stringstream sstm;
        sstm << ""Unexpected end-of-line in cycle "" << cycle << "", field "" << field << std::endl;
        throw MessageException(sstm.str());
    }

    source_is_undef = false;
    try {
        ");

            #line default
            #line hidden

            #line 298 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(RS.TypeScope.GetType(signal).Name));

            #line default
            #line hidden

            #line 298 ""
                    this.Write(" tmpval = bus_");

            #line default
            #line hidden

            #line 298 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusNameToValidName(signal.Parent as AST.Bus)));

            #line default
            #line hidden

            #line 298 ""
                    this.Write(".");

            #line default
            #line hidden

            #line 298 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(signal.Name));

            #line default
            #line hidden

            #line 298 ""
                    this.Write("();\n    } catch (InvalidReadException e) {\n        source_is_undef = true;\n    }\n" +
                               "\n    if (token.compare(\"U\") == 0 && source_is_undef) {\n        // Don\'t care\n   " +
                               " } else if (token.compare(\"U\") != 0 && bus_");

            #line default
            #line hidden

            #line 305 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusNameToValidName(signal.Parent as AST.Bus)));

            #line default
            #line hidden

            #line 305 ""
                    this.Write(".");

            #line default
            #line hidden

            #line 305 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(signal.Name));

            #line default
            #line hidden

            #line 305 ""
                    this.Write("() != parse_");

            #line default
            #line hidden

            #line 305 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(RS.TypeScope.GetType(signal).Name));

            #line default
            #line hidden

            #line 305 ""
                    this.Write("(token)) {\n        std::stringstream sstm;\n        sstm << \"Error in cycle \" << c" +
                               "ycle << std::endl;\n        sstm << \"Expected value \" << ");

            #line default
            #line hidden

            #line 308 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(typecast));

            #line default
            #line hidden

            #line 308 ""
                    this.Write("parse_");

            #line default
            #line hidden

            #line 308 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(RS.TypeScope.GetType(signal).Name));

            #line default
            #line hidden

            #line 308 ""
                    this.Write("(token) << \", but got \" << ");

            #line default
            #line hidden

            #line 308 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(typecast));

            #line default
            #line hidden

            #line 308 ""
                    this.Write("bus_");

            #line default
            #line hidden

            #line 308 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusNameToValidName(signal.Parent as AST.Bus)));

            #line default
            #line hidden

            #line 308 ""
                    this.Write(".");

            #line default
            #line hidden

            #line 308 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(signal.Name));

            #line default
            #line hidden

            #line 308 ""
                    this.Write("() << \" for field \" << ");

            #line default
            #line hidden

            #line 308 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(Naming.AssemblyNameToFileName(Network)));

            #line default
            #line hidden

            #line 308 ""
                    this.Write("_SIGNAL_NAMES[field] << \" (raw: \" << token << \")\" << std::endl;\n        throw Mes" +
                               "sageException(sstm.str());\n    }\n    field++;\n");

            #line default
            #line hidden

            #line 312 ""
                }

            #line default
            #line hidden

            #line 313 ""
            }

            #line default
            #line hidden

            #line 314 ""
            this.Write("}\n\nvoid ");

            #line default
            #line hidden

            #line 316 ""
            this.Write(this.ToStringHelper.ToStringWithCulture(Naming.AssemblyNameToFileName(Network)));

            #line default
            #line hidden

            #line 316 ""
            this.Write("::Stop()\n{\n    if (trace_input != NULL) {\n        trace_input->close();\n        d" +
                       "elete trace_input;\n    }\n}\n");

            #line default
            #line hidden
            return(this.GenerationEnvironment.ToString());
        }