예제 #1
0
        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());
        }
예제 #2
0
        public virtual string TransformText()
        {
            this.GenerationEnvironment = null;

            #line 6 ""
            this.Write(@"
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

-- library SYSTEM_TYPES;
use work.SYSTEM_TYPES.ALL;

-- User defined packages here
-- #### USER-DATA-IMPORTS-START
-- #### USER-DATA-IMPORTS-END

package CUSTOM_TYPES is

-- User defined types here
-- #### USER-DATA-CORETYPES-START
-- #### USER-DATA-CORETYPES-END

");

            #line default
            #line hidden

            #line 24 ""
            if (RS.CustomTypes.Any())
            {
            #line default
            #line hidden

            #line 25 ""
                this.Write("    -- Types for processes\n");

            #line default
            #line hidden

            #line 26 ""
                foreach (var t in RS.CustomTypes)
                {
            #line default
            #line hidden

            #line 27 ""
                    this.Write("    type ");

            #line default
            #line hidden

            #line 27 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(t.ToSafeVHDLName()));

            #line default
            #line hidden

            #line 27 ""
                    this.Write(" is\n");

            #line default
            #line hidden

            #line 28 ""
                    foreach (var f in RS.ListMembers(t))
                    {
            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 30 ""
                    }

            #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 ""
            }

            #line default
            #line hidden

            #line 35 ""
            foreach (var t in RS.TypeDefinitions)
            {
            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 37 ""
            }

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 39 ""
            foreach (var enumtype in RS.EnumTypes.Where(x => x.IsIrregularEnum))
            {
            #line default
            #line hidden

            #line 40 ""
                this.Write("    -- Converts an integer to ");

            #line default
            #line hidden

            #line 40 ""
                this.Write(this.ToStringHelper.ToStringWithCulture(enumtype.ToSafeVHDLName()));

            #line default
            #line hidden

            #line 40 ""
                this.Write("\n    pure function fromValue_");

            #line default
            #line hidden

            #line 41 ""
                this.Write(this.ToStringHelper.ToStringWithCulture(enumtype.ToSafeVHDLName()));

            #line default
            #line hidden

            #line 41 ""
                this.Write("(v: INTEGER) return ");

            #line default
            #line hidden

            #line 41 ""
                this.Write(this.ToStringHelper.ToStringWithCulture(enumtype.ToSafeVHDLName()));

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 42 ""
                this.Write(this.ToStringHelper.ToStringWithCulture(enumtype.ToSafeVHDLName()));

            #line default
            #line hidden

            #line 42 ""
                this.Write(" to an integer\n    pure function toValue_");

            #line default
            #line hidden

            #line 43 ""
                this.Write(this.ToStringHelper.ToStringWithCulture(enumtype.ToSafeVHDLName()));

            #line default
            #line hidden

            #line 43 ""
                this.Write("(v: ");

            #line default
            #line hidden

            #line 43 ""
                this.Write(this.ToStringHelper.ToStringWithCulture(enumtype.ToSafeVHDLName()));

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 44 ""
            }

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 46 ""
            if (RS.BusArrays.Any())
            {
            #line default
            #line hidden

            #line 47 ""
                this.Write("    -- Bus array definitions\n");

            #line default
            #line hidden

            #line 48 ""
                foreach (var signal in RS.BusArrays)
                {
                    var vhdltype    = RS.VHDLType(signal);
                    var elementtype = RS.TypeScope.GetByName(vhdltype.ElementName);
                    var bus         = signal.Parent as AST.Bus;
                    var arraylength = RS.GetArrayLength(signal);

                    if (elementtype.IsSystemType)
                    {
            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 55 ""
                        this.Write("_type is ");

            #line default
            #line hidden

            #line 55 ""
                        this.Write(this.ToStringHelper.ToStringWithCulture(elementtype.ToSafeVHDLName()));

            #line default
            #line hidden

            #line 55 ""
                        this.Write("_ARRAY(0 to ");

            #line default
            #line hidden

            #line 55 ""
                        this.Write(this.ToStringHelper.ToStringWithCulture(arraylength));

            #line default
            #line hidden

            #line 55 ""
                        this.Write(" - 1);\n");

            #line default
            #line hidden

            #line 56 ""
                    }
                    else if (RS.Config.USE_EXPLICIT_LITERAL_ARRAY_LENGTH)
                    {
            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 57 ""
                        this.Write("_type is array (0 to ");

            #line default
            #line hidden

            #line 57 ""
                        this.Write(this.ToStringHelper.ToStringWithCulture(arraylength - 1));

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line 59 ""
                        this.Write("    type ");

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 59 ""
                        this.Write("_type is array (0 to ");

            #line default
            #line hidden

            #line 59 ""
                        this.Write(this.ToStringHelper.ToStringWithCulture(arraylength));

            #line default
            #line hidden

            #line 59 ""
                        this.Write(" - 1) of ");

            #line default
            #line hidden

            #line 59 ""
                        this.Write(this.ToStringHelper.ToStringWithCulture(elementtype.ToSafeVHDLName()));

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 60 ""
                    }

            #line default
            #line hidden

            #line 61 ""
                }

            #line default
            #line hidden

            #line 62 ""
            }

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 64 ""
            foreach (var enumtype in RS.EnumTypes)
            {
            #line default
            #line hidden

            #line 65 ""
                this.Write("    -- converts ");

            #line default
            #line hidden

            #line 65 ""
                this.Write(this.ToStringHelper.ToStringWithCulture(enumtype.Name));

            #line default
            #line hidden

            #line 65 ""
                this.Write(" into a string\n    pure function str(b: ");

            #line default
            #line hidden

            #line 66 ""
                this.Write(this.ToStringHelper.ToStringWithCulture(enumtype.ToSafeVHDLName()));

            #line default
            #line hidden

            #line 66 ""
                this.Write(") return string;\n");

            #line default
            #line hidden

            #line 67 ""
            }

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 69 ""
            if (RS.Constants.Any())
            {
            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 71 ""
            }

            #line default
            #line hidden

            #line 72 ""
            foreach (var c in RS.Constants)
            {
            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 74 ""
            }

            #line default
            #line hidden

            #line 75 ""
            this.Write("\n\n-- User defined types here\n-- #### USER-DATA-TRAILTYPES-START\n-- #### USER-DATA" +
                       "-TRAILTYPES-END\n\n\nend CUSTOM_TYPES;\n\n");

            #line default
            #line hidden

            #line 84 ""
            if (RS.EnumTypes.Any())
            {
            #line default
            #line hidden

            #line 85 ""
                this.Write("package body CUSTOM_TYPES is\n");

            #line default
            #line hidden

            #line 86 ""
                foreach (var enumtype in RS.EnumTypes)
                {
            #line default
            #line hidden

            #line 87 ""
                    this.Write("    -- converts ");

            #line default
            #line hidden

            #line 87 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(enumtype));

            #line default
            #line hidden

            #line 87 ""
                    this.Write(" into a string\n    pure function str(b: ");

            #line default
            #line hidden

            #line 88 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(enumtype.ToSafeVHDLName()));

            #line default
            #line hidden

            #line 88 ""
                    this.Write(") return string is\n    begin\n        return ");

            #line default
            #line hidden

            #line 90 ""
                    this.Write(this.ToStringHelper.ToStringWithCulture(enumtype.ToSafeVHDLName()));

            #line default
            #line hidden

            #line 90 ""
                    this.Write("\'image(b);\n    end str;\n\n");

            #line default
            #line hidden

            #line 93 ""
                    if (enumtype.IsIrregularEnum)
                    {
            #line default
            #line hidden

            #line 94 ""
                        this.Write("    -- Converts an integer to ");

            #line default
            #line hidden

            #line 94 ""
                        this.Write(this.ToStringHelper.ToStringWithCulture(enumtype.ToSafeVHDLName()));

            #line default
            #line hidden

            #line 94 ""
                        this.Write("\n    pure function fromValue_");

            #line default
            #line hidden

            #line 95 ""
                        this.Write(this.ToStringHelper.ToStringWithCulture(enumtype.ToSafeVHDLName()));

            #line default
            #line hidden

            #line 95 ""
                        this.Write("(v: INTEGER) return ");

            #line default
            #line hidden

            #line 95 ""
                        this.Write(this.ToStringHelper.ToStringWithCulture(enumtype.ToSafeVHDLName()));

            #line default
            #line hidden

            #line 95 ""
                        this.Write(" is\n    begin\n        case v is\n");

            #line default
            #line hidden

            #line 98 ""
                        foreach (var f in RS.GetEnumValues(enumtype))
                        {
            #line default
            #line hidden

            #line 99 ""
                            this.Write("            when ");

            #line default
            #line hidden

            #line 99 ""
                            this.Write(this.ToStringHelper.ToStringWithCulture(f.Value));

            #line default
            #line hidden

            #line 99 ""
                            this.Write(" =>\n                return ");

            #line default
            #line hidden

            #line 100 ""
                            this.Write(this.ToStringHelper.ToStringWithCulture(f.Key));

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 101 ""
                        }

            #line default
            #line hidden

            #line 102 ""
                        this.Write("           when others =>\n               return ");

            #line default
            #line hidden

            #line 103 ""
                        this.Write(this.ToStringHelper.ToStringWithCulture(RS.GetEnumValues(enumtype).First().Key));

            #line default
            #line hidden

            #line 103 ""
                        this.Write(";\n        end case;\n    end fromValue_");

            #line default
            #line hidden

            #line 105 ""
                        this.Write(this.ToStringHelper.ToStringWithCulture(enumtype.ToSafeVHDLName()));

            #line default
            #line hidden

            #line 105 ""
                        this.Write(";\n\n    -- Converts a ");

            #line default
            #line hidden

            #line 107 ""
                        this.Write(this.ToStringHelper.ToStringWithCulture(enumtype.ToSafeVHDLName()));

            #line default
            #line hidden

            #line 107 ""
                        this.Write(" to an integer\n    pure function toValue_");

            #line default
            #line hidden

            #line 108 ""
                        this.Write(this.ToStringHelper.ToStringWithCulture(enumtype.ToSafeVHDLName()));

            #line default
            #line hidden

            #line 108 ""
                        this.Write("(v: ");

            #line default
            #line hidden

            #line 108 ""
                        this.Write(this.ToStringHelper.ToStringWithCulture(enumtype.ToSafeVHDLName()));

            #line default
            #line hidden

            #line 108 ""
                        this.Write(") return INTEGER is\n    begin\n        case v is\n");

            #line default
            #line hidden

            #line 111 ""
                        foreach (var f in RS.GetEnumValues(enumtype))
                        {
            #line default
            #line hidden

            #line 112 ""
                            this.Write("            when ");

            #line default
            #line hidden

            #line 112 ""
                            this.Write(this.ToStringHelper.ToStringWithCulture(f.Key));

            #line default
            #line hidden

            #line 112 ""
                            this.Write(" =>\n                return ");

            #line default
            #line hidden

            #line 113 ""
                            this.Write(this.ToStringHelper.ToStringWithCulture(f.Value));

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 114 ""
                        }

            #line default
            #line hidden

            #line 115 ""
                        this.Write("           when others =>\n               return ");

            #line default
            #line hidden

            #line 116 ""
                        this.Write(this.ToStringHelper.ToStringWithCulture(RS.GetEnumValues(enumtype).First().Value));

            #line default
            #line hidden

            #line 116 ""
                        this.Write(";\n        end case;\n    end toValue_");

            #line default
            #line hidden

            #line 118 ""
                        this.Write(this.ToStringHelper.ToStringWithCulture(enumtype.ToSafeVHDLName()));

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 120 ""
                    }

            #line default
            #line hidden

            #line 121 ""
                }

            #line default
            #line hidden

            #line 122 ""
                this.Write("\n\n-- User defined bodies here\n-- #### USER-DATA-BODY-START\n-- #### USER-DATA-BODY" +
                           "-END\n\nend CUSTOM_TYPES;\n");

            #line default
            #line hidden

            #line 129 ""
            }

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

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

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 8 ""
            this.Write("\"\n\n// Insert additional includes here\n// #### USER-DATA-INCLUDE-START\n// #### USE" +
                       "R-DATA-INCLUDE-END\n\n");

            #line default
            #line hidden

            #line 14 ""

            var known = new HashSet <Type>();
            foreach (var bus in Network.Busses)
            {
                if (known.Contains(bus.SourceType))
                {
                    continue;
                }
                known.Add(bus.SourceType);


            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 23 ""
                foreach (var signal in bus.Signals)
                {
                    var cpptype = RS.TypeScope.GetType(signal);
                    if (cpptype.IsArray)
                    {
                        var eltype = cpptype.ElementName;

                        string arraylen = string.Empty;

                        if (signal.DefaultValue is SME.AST.ArrayCreateExpression)
                        {
                            arraylen = (signal.DefaultValue as SME.AST.ArrayCreateExpression).ElementExpressions.Length.ToString();
                        }
                        else if (signal.DefaultValue is SME.AST.EmptyArrayCreateExpression)
                        {
                            arraylen = RS.Renderer.RenderExpression((signal.DefaultValue as SME.AST.EmptyArrayCreateExpression).SizeExpression);
                        }
                        else
                        {
                            arraylen = RS.GetArrayLength(signal).DefaultValue.ToString();
                        }


            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 38 ""
                        this.Write(" = ");

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 38 ""
                        this.Write(";\n    valid_");

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 39 ""
                        this.Write(" = new bool[size_");

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 40 ""
                        this.Write(" = new bool[size_");

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 40 ""
                        this.Write("];\n    staged_");

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 41 ""
                        this.Write(" = new bool[size_");

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 44 ""
                        this.Write(this.ToStringHelper.ToStringWithCulture(signal.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(signal.Name));

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 46 ""
                        this.Write(", 0, size_");

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 46 ""
                        this.Write(" * sizeof(bool));\n    std::memset(staged_");

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 47 ""
                        this.Write(", 0, size_");

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 48 ""
                        if (signal.DefaultValue == null)
                        {
            #line default
            #line hidden

            #line 49 ""
                            this.Write("    std::memset(valid_");

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 49 ""
                            this.Write(", 0, size_");

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 49 ""
                            this.Write(" * sizeof(bool));\n");

            #line default
            #line hidden

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

            #line 51 ""
                            this.Write("    std::memset(valid_");

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 51 ""
                            this.Write(", 1, size_");

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

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

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

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 53 ""
                                this.Write(" orig_");

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 53 ""
                                this.Write("[] = ");

            #line default
            #line hidden

            #line 53 ""
                                this.Write(this.ToStringHelper.ToStringWithCulture(RS.Renderer.GetInitializer(signal)));

            #line default
            #line hidden

            #line 53 ""
                                this.Write(";\n    std::memcpy(read_");

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 54 ""
                                this.Write(", orig_");

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 54 ""
                                this.Write(", ");

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 54 ""
                                this.Write("));\n    std::memcpy(write_");

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 55 ""
                                this.Write(", orig_");

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 56 ""
                            }

            #line default
            #line hidden

            #line 57 ""
                        }

            #line default
            #line hidden

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

            #line 59 ""
                        this.Write("    written_");

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 59 ""
                        this.Write(" = false;\n");

            #line default
            #line hidden

            #line 60 ""
                        if (signal.DefaultValue == null)
                        {
            #line default
            #line hidden

            #line 61 ""
                            this.Write("    valid_");

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 61 ""
                            this.Write(" = false;\n");

            #line default
            #line hidden

            #line 62 ""
                        }

            #line default
            #line hidden

            #line 63 ""
                    }

            #line default
            #line hidden

            #line 64 ""
                }

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 66 ""
                foreach (var signal in bus.Signals.Where(x => x.DefaultValue != null))
                {
                    var cpptype = RS.TypeScope.GetType(signal);
                    var ini     = RS.Renderer.GetInitializer(signal);

                    if (!cpptype.IsArray)
                    {
            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 72 ""
                    }

            #line default
            #line hidden

            #line 73 ""
                    if (!string.IsNullOrWhiteSpace(ini))
                    {
            #line default
            #line hidden

            #line 74 ""
                        this.Write("    read_");

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 74 ""
                        this.Write(" = write_");

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 74 ""
                        this.Write(" = ");

            #line default
            #line hidden

            #line 74 ""
                        this.Write(this.ToStringHelper.ToStringWithCulture(RS.Renderer.GetInitializer(signal)));

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 75 ""
                    }

            #line default
            #line hidden

            #line 76 ""
                }

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 79 ""
                foreach (var signal in bus.Signals)
                {
                    var cpptype = RS.TypeScope.GetType(signal);
                    if (cpptype.IsArray)
                    {
                        var eltype = cpptype.ElementName;



            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 85 ""
                        this.Write("(size_t index) const {\n    if (index >= size_");

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 86 ""
                        this.Write(")\n        throw IndexOutOfBoundsException(\"Invalid index: ");

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 87 ""
                        this.Write("\");\n    if (!valid_");

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 88 ""
                        this.Write("[index])\n        throw InvalidReadException(\"Invalid read: ");

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 89 ""
                        this.Write("\");\n\n    return read_");

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 91 ""
                        this.Write("[index];\n}\n\n");

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 94 ""
                        this.Write("(size_t index, ");

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 94 ""
                        this.Write(" value) {\n    if (index >= size_");

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 95 ""
                        this.Write(")\n        throw IndexOutOfBoundsException(\"Invalid index: ");

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 96 ""
                        this.Write("\");\n    if (written_");

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 97 ""
                        this.Write("[index])\n        throw InvalidDoubleWriteException(\"Invalid write: ");

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 98 ""
                        this.Write("\");\n\n    staged_");

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 100 ""
                        this.Write("[index] = true;\n    return write_");

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 101 ""
                        this.Write("[index] = value;\n}\n");

            #line default
            #line hidden

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

            #line 104 ""
                        this.Write(this.ToStringHelper.ToStringWithCulture(Type(signal)));

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 104 ""
                        this.Write("() const {\n    if (!valid_");

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 105 ""
                        this.Write(")\n        throw InvalidReadException(\"Invalid read: ");

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 106 ""
                        this.Write("\");\n\n    return read_");

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 111 ""
                        this.Write(this.ToStringHelper.ToStringWithCulture(Type(signal)));

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 111 ""
                        this.Write(this.ToStringHelper.ToStringWithCulture(Type(signal)));

            #line default
            #line hidden

            #line 111 ""
                        this.Write(" value) {\n    if (written_");

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 112 ""
                        this.Write(")\n        throw InvalidDoubleWriteException(\"Invalid write: ");

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 113 ""
                        this.Write("\");\n\n    staged_");

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 115 ""
                        this.Write(" = true;\n    return write_");

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 116 ""
                        this.Write(" = value;\n}\n");

            #line default
            #line hidden

            #line 118 ""
                    }

            #line default
            #line hidden

            #line 119 ""
                }

            #line default
            #line hidden

            #line 120 ""
                this.Write("\nvoid ");

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 121 ""
                this.Write("::forward_signals() {\n    size_t i;\n\n");

            #line default
            #line hidden

            #line 124 ""
                foreach (var signal in bus.Signals)
                {
                    var cpptype = RS.TypeScope.GetType(signal);
                    if (cpptype.IsArray)
                    {
                        var eltype = cpptype.ElementName;


            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 129 ""
                        this.Write("; i++) {\n        if (staged_");

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 130 ""
                        this.Write("[i]) {\n            written_");

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 131 ""
                        this.Write("[i] = true;\n            staged_");

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 132 ""
                        this.Write("[i] = false;\n            valid_");

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 133 ""
                        this.Write("[i] = true;\n            read_");

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 134 ""
                        this.Write("[i] = write_");

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 134 ""
                        this.Write("[i];\n        }\n    }\n");

            #line default
            #line hidden

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

            #line 138 ""
                        this.Write("    if (staged_");

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 139 ""
                        this.Write(" = true;\n        staged_");

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 140 ""
                        this.Write(" = false;\n        valid_");

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 141 ""
                        this.Write(" = true;\n        read_");

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 142 ""
                        this.Write(" = write_");

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 144 ""
                    }

            #line default
            #line hidden

            #line 145 ""
                }

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 148 ""
                this.Write("::propagate_signals() {\n    size_t i;\n\n");

            #line default
            #line hidden

            #line 151 ""
                foreach (var signal in bus.Signals)
                {
                    var cpptype = RS.TypeScope.GetType(signal);
                    if (cpptype.IsArray)
                    {
                        var eltype = cpptype.ElementName;

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 155 ""
                        this.Write("; i++) {\n        if (written_");

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 156 ""
                        this.Write("[i]) {\n            written_");

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 157 ""
                        this.Write("[i] = false;\n        }\n    }\n");

            #line default
            #line hidden

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

            #line 161 ""
                        this.Write("    if (written_");

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 162 ""
                        this.Write(" = false;\n    }\n");

            #line default
            #line hidden

            #line 164 ""
                    }

            #line default
            #line hidden

            #line 165 ""
                }

            #line default
            #line hidden

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

            #line default
            #line hidden

            #line 168 ""
            }

            #line default
            #line hidden

            #line 169 ""
            this.Write("\n// Insert additional code and classes here\n// #### USER-DATA-EXTRA-START\n// ####" +
                       " USER-DATA-EXTRA-END\n");

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