diff --git a/CHANGELOG b/CHANGELOG index 8bc44af32409e331805ce5284f05d37228d6a82c..4975e559c77e1648c1ecc7239af4cbcdb9c2337a 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -8,6 +8,8 @@ TODO:: LAST DONE: CHANGES: +- ver. 0.20.011 - <b>2022.03.01</b> Changed: + - DOT: changed record shape into HTML shape with HTML-like labels to avoid flat edge errors - ver. 0.20.010 - <b>2021.12.19</b> Changed: - Wiki for VSCode updated - tasks.json and makefiles updates and fixes diff --git a/examples/rundot.bat b/examples/rundot.bat index de6d50737f7c5682f2149cf63b1fdc85708c434b..d192cf64edbb1fcf7ffe10f47c9ff58b7db88a0f 100644 --- a/examples/rundot.bat +++ b/examples/rundot.bat @@ -1,4 +1,4 @@ -path = "c:\Program Files (x86)\Graphviz2.38\bin\";%path% +path = "d:\Program Files\Graphviz\bin\";%path% dot -Tgif macro_DDS.dot -omacro_DDS.gif dot -Tgif macro_unwraped.dot -omacro_unwraped.gif diff --git a/src/cpp/DSP_DOT.cpp b/src/cpp/DSP_DOT.cpp index 81f164649a2b570ef3193917bc67454b6048a76f..eb0d5ce178612a5b5c6da2dc03e8c857a6f0f16d 100644 --- a/src/cpp/DSP_DOT.cpp +++ b/src/cpp/DSP_DOT.cpp @@ -21,8 +21,12 @@ const vector<string> DSP::DOT_colors = #ifdef __DEBUG__ - string DSP::u::Splitter::GetComponentNodeParams_DOTfile() + string DSP::u::Splitter::GetComponentNodeParams_DOTfile(void) { + GetComponentNodeParams_DOTfile(); + } + string DSP::u::Splitter::GetComponentNodeParams_DOTfile(const string &leading_space) { + UNUSED_ARGUMENT(leading_space); return "[shape=point]"; } @@ -221,6 +225,10 @@ string DSP::Component::GetComponentName_DOTfile() return text_buffer; } +string DSP::Component::GetComponentNodeParams_DOTfile(void) { + return GetComponentNodeParams_DOTfile(""); +} + // Returns component node parameters used in DOTfile /* * -# generate string segment (internal buffer - ?? size selection) @@ -228,7 +236,7 @@ string DSP::Component::GetComponentName_DOTfile() * -# copy string segment into output buffer. * . */ -string DSP::Component::GetComponentNodeParams_DOTfile() +string DSP::Component::GetComponentNodeParams_DOTfile(const string &leading_space) { string tempName; unsigned int ind; @@ -241,29 +249,55 @@ string DSP::Component::GetComponentNodeParams_DOTfile() if (tempName.length() == 0) tempName = "NONAME"; - /* - mixed_2 [label="{{<in0> in0 | <in> in1 | DDScos | {<out0> out0 | <out1> out1}}"]; + /* Old + mixed_2 [label="{{<in0> in0 | <in1> in1 | DDScos | {<out0> out0 | <out1> out1}}"]; mixed_2[shape=record,color=red]; clock_003D6808 -> mixed_2:clock [style=dotted, constraint=false, color=red]; */ - text_buffer << "[label=\"{"; + // https://graphviz.org/doc/info/shapes.html + /* + mixed_2 [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0"> + <TR><TD PORT="in1">in1</TD><TD PORT="in2">in2</TD></TR> + <TR><TD>DDScos</TD></TR> + <TR><TD PORT="out1">out1</TD><TD PORT="out2">out2</TD></TR> + </TABLE>>, shape=plain]; + */ + unsigned long tmp_no_of_inputs = 1, tmp_no_of_outputs = 1; + if (Convert2Block() != NULL) { + tmp_no_of_inputs = Convert2Block()->NoOfInputs; + // text_buffer << "# tmp_no_of_inputs=" << tmp_no_of_inputs << std::endl; + if (tmp_no_of_inputs == 0) tmp_no_of_inputs = 1; + tmp_no_of_outputs = Convert2Block()->NoOfOutputs; + // text_buffer << "# tmp_no_of_outputs=" << tmp_no_of_outputs << std::endl; + if (tmp_no_of_outputs == 0) tmp_no_of_outputs = 1; + } + // text_buffer << "# tmp_no_of_inputs=" << tmp_no_of_inputs << ", tmp_no_of_outputs=" << tmp_no_of_outputs << std::endl; + unsigned long gcd = DSP::f::gcd(tmp_no_of_inputs, tmp_no_of_outputs); + unsigned long no_of_html_columns = (tmp_no_of_inputs * tmp_no_of_outputs) / gcd; + // text_buffer << "# gcd=" << gcd << ", no_of_html_columns=" << no_of_html_columns << std::endl; + unsigned long no_of_columns_per_input = no_of_html_columns / tmp_no_of_inputs; + unsigned long no_of_columns_per_output = no_of_html_columns / tmp_no_of_outputs; + // text_buffer << "# no_of_columns_per_input=" << no_of_columns_per_input << ", no_of_columns_per_output=" << no_of_columns_per_output << std::endl; + + text_buffer << "[label=<<TABLE BORDER=\"0\" CELLBORDER=\"1\" CELLSPACING=\"0\">" << std::endl; if (Convert2Block() != NULL) { if (Convert2Block()->NoOfInputs > 0) { - text_buffer << "{"; + text_buffer << leading_space << " " << "<TR>"; // \t - TAB for (ind =0; ind < Convert2Block()->NoOfInputs; ind++) { - if (ind == 0) - text_buffer << "<in" << ind << "> "; - else - text_buffer << " | <in" << ind << "> "; + // if (ind == 0) + // text_buffer << "<in" << ind << "> "; + // else + // text_buffer << " | <in" << ind << "> "; + text_buffer << "<TD COLSPAN=\"" << no_of_columns_per_input << "\" PORT=\"in" << ind+1 << "\"><FONT POINT-SIZE=\"8.0\">in" << ind+1 << "</FONT></TD>"; } - text_buffer << "} | "; + text_buffer << "</TR>" << std::endl; } } @@ -273,13 +307,22 @@ string DSP::Component::GetComponentNodeParams_DOTfile() { switch (tempName[ind]) { - case ' ': case '<': + internal_text += "<"; + break; case '>': + internal_text += ">"; + break; + case '"': + internal_text += """; + break; + case '&': + internal_text += "&"; + break; + case ' ': case '{': case '}': case '|': - case '"': internal_text += '\\'; internal_text += tempName[ind]; break; @@ -288,24 +331,25 @@ string DSP::Component::GetComponentNodeParams_DOTfile() break; } } - text_buffer << internal_text; + text_buffer << leading_space << " " << "<TR><TD COLSPAN=\"" << no_of_html_columns << "\">" << internal_text << "</TD></TR>" << std::endl; if (NoOfOutputs > 0) { - text_buffer << " | {"; + text_buffer << leading_space << " " << "<TR>"; // \t - TAB for (ind =0; ind < NoOfOutputs; ind++) { - if (ind == 0) - text_buffer << "<out" << ind << "> "; - else - text_buffer << " | <out" << ind << "> "; + // if (ind == 0) + // text_buffer << "<out" << ind << "> "; + // else + // text_buffer << " | <out" << ind << "> "; + text_buffer << "<TD COLSPAN=\"" << no_of_columns_per_output << "\" PORT=\"out" << ind+1 << "\"><FONT POINT-SIZE=\"8.0\">out" << ind+1 << "</FONT></TD>"; } - text_buffer << "}"; + text_buffer << "</TR>" << std::endl; } - text_buffer << "}\",shape=record"; + text_buffer << leading_space << " " << "</TABLE>>, shape=plain"; if (Convert2ClockTrigger() != NULL) { @@ -374,7 +418,7 @@ void DSP::Component::ComponentEdgesToDOTfile(std::ofstream &dot_plik, const stri for (ind_sep = 0; ind_sep < space_sep; ind_sep++) dot_plik << ' '; if (UsePorts_DOTfile() == true) - dot_plik << this_name << ":out" << ind << " -> "; + dot_plik << this_name << ":out" << ind + 1 << " -> "; else dot_plik << this_name << " -> "; @@ -382,7 +426,7 @@ void DSP::Component::ComponentEdgesToDOTfile(std::ofstream &dot_plik, const stri if (current_macro->UsePorts_DOTfile() == true) { - dot_plik << that_name << ":in" << macro_input_no; + dot_plik << that_name << ":in" << macro_input_no + 1; } else dot_plik << that_name; @@ -407,7 +451,7 @@ void DSP::Component::ComponentEdgesToDOTfile(std::ofstream &dot_plik, const stri for (ind_sep = 0; ind_sep < space_sep; ind_sep++) dot_plik << ' '; if (UsePorts_DOTfile() == true) - dot_plik << this_name << ":out" << ind << " -> "; + dot_plik << this_name << ":out" << ind + 1 << " -> "; else dot_plik << this_name << " -> "; @@ -415,7 +459,7 @@ void DSP::Component::ComponentEdgesToDOTfile(std::ofstream &dot_plik, const stri that_name = OutputBlocks[ind]->GetComponentName_DOTfile(); if (OutputBlocks[ind]->UsePorts_DOTfile() == true) - dot_plik << that_name << ":in" << OutputBlocks_InputNo[ind]; + dot_plik << that_name << ":in" << OutputBlocks_InputNo[ind] + 1; else dot_plik << that_name; @@ -446,7 +490,7 @@ void DSP::Component::ComponentEdgesToDOTfile(std::ofstream &dot_plik, const stri for (ind_sep = 0; ind_sep < space_sep; ind_sep++) dot_plik << ' '; stringstream ss; - ss << this_name << "_const_in" << ind + ss << this_name << "_const_in" << ind + 1 << " [shape=none,label=" << fixed << setprecision(3) << temp_block->ConstantInputValues[ind] << "];"; dot_plik << ss.str() << std::endl; @@ -455,11 +499,11 @@ void DSP::Component::ComponentEdgesToDOTfile(std::ofstream &dot_plik, const stri dot_plik << ' '; ss.clear(); ss.str(""); if (UsePorts_DOTfile() == true) { - ss << this_name << "_const_in" << ind - << " -> " << this_name << ":in" << ind << " "; + ss << this_name << "_const_in" << ind + 1 + << " -> " << this_name << ":in" << ind + 1 << " "; } else { - ss << this_name << "_const_in" << ind << " -> " << this_name << " "; + ss << this_name << "_const_in" << ind + 1 << " -> " << this_name << " "; } ss << DSP::Component::GetComponentEdgeParams_DOTfile(ind); dot_plik << ss.str() << ";" << std::endl; @@ -533,7 +577,7 @@ void DSP::Component::ComponentToDOTfile(std::ofstream &dot_plik, // Save info for current component // Bloczki(1).unique_index = 12; % unique number identifying object == integer part of Bloczki(ind).output_blocks this_name = GetComponentName_DOTfile(); - temp_name = GetComponentNodeParams_DOTfile(); + temp_name = GetComponentNodeParams_DOTfile(" "); dot_plik << " " << this_name << " " << temp_name << ";" << std::endl; if (clock_ptr != NULL) @@ -684,9 +728,9 @@ void DSP::Component::ComponentToDOTfile(std::ofstream &dot_plik, for (ind =0; ind < NoOfInputs; ind++) { if (ind == 0) - params_ss << "<in" << ind << "> "; + params_ss << "<in" << ind + 1 << "> "; else - params_ss << " | <in" << ind << "> "; + params_ss << " | <in" << ind + 1 << "> "; } params_ss << "} | "; } @@ -696,9 +740,19 @@ void DSP::Component::ComponentToDOTfile(std::ofstream &dot_plik, { switch (tempName[ind]) { - case ' ': case '<': + label += "<"; + break; case '>': + label += ">"; + break; + case '"': + label += """; + break; + case '&': + label += "&"; + break; + case ' ': case '{': case '}': case '|': @@ -718,9 +772,9 @@ void DSP::Component::ComponentToDOTfile(std::ofstream &dot_plik, for (ind =0; ind < NoOfOutputs; ind++) { if (ind == 0) - params_ss << "<out" << ind << "> "; + params_ss << "<out" << ind + 1 << "> "; else - params_ss << " | <out" << ind << "> "; + params_ss << " | <out" << ind + 1 << "> "; } params_ss << "}"; } @@ -752,9 +806,19 @@ void DSP::Component::ComponentToDOTfile(std::ofstream &dot_plik, { switch (tempName[ind]) { - case ' ': case '<': + label += "<"; + break; case '>': + label += ">"; + break; + case '"': + label += """; + break; + case '&': + label += "&"; + break; + case ' ': case '{': case '}': case '|': @@ -775,9 +839,9 @@ void DSP::Component::ComponentToDOTfile(std::ofstream &dot_plik, for (ind =0; ind < MacroInput_block->NoOfOutputs; ind++) { if (ind == 0) - params_ss << "<out" << ind << "> "; + params_ss << "<out" << ind + 1 << "> "; else - params_ss << " | <out" << ind << "> "; + params_ss << " | <out" << ind + 1 << "> "; } params_ss << "}"; } @@ -811,9 +875,9 @@ void DSP::Component::ComponentToDOTfile(std::ofstream &dot_plik, for (ind =0; ind < MacroOutput_block->NoOfInputs; ind++) { if (ind == 0) - text_buffer << "<in" << ind << "> "; + text_buffer << "<in" << ind + 1 << "> "; else - text_buffer << " | <in" << ind << "> "; + text_buffer << " | <in" << ind + 1 << "> "; } text_buffer << "} | "; } @@ -823,9 +887,19 @@ void DSP::Component::ComponentToDOTfile(std::ofstream &dot_plik, { switch (tempName[ind]) { - case ' ': case '<': + label += "<"; + break; case '>': + label += ">"; + break; + case '"': + label += """; + break; + case '&': + label += "&"; + break; + case ' ': case '{': case '}': case '|': @@ -878,7 +952,7 @@ void DSP::Component::ComponentToDOTfile(std::ofstream &dot_plik, for (ind_sep = 0; ind_sep < space_sep; ind_sep++) dot_plik << ' '; if (UsePorts_DOTfile() == true) - dot_plik << macro_name << ":out" << ind << " -> "; + dot_plik << macro_name << ":out" << ind + 1 << " -> "; else dot_plik << macro_name << " -> "; @@ -921,7 +995,7 @@ void DSP::Component::ComponentToDOTfile(std::ofstream &dot_plik, if (current_macro->UsePorts_DOTfile() == true) { output_block_input_no = current_macro->GetMacroInputNo(output_block, output_block_input_no); - dot_plik << that_name << ":in" << output_block_input_no; + dot_plik << that_name << ":in" << output_block_input_no + 1; } else dot_plik << that_name; @@ -932,7 +1006,7 @@ void DSP::Component::ComponentToDOTfile(std::ofstream &dot_plik, that_name = output_block->GetComponentName_DOTfile(); if (output_block->UsePorts_DOTfile() == true) - dot_plik << that_name << ":in" << output_block_input_no; + dot_plik << that_name << ":in" << output_block_input_no + 1; else dot_plik << that_name; } @@ -971,10 +1045,10 @@ void DSP::Component::ComponentToDOTfile(std::ofstream &dot_plik, dot_plik << ' '; text_buffer.clear(); text_buffer.str(""); if (UsePorts_DOTfile() == true) - text_buffer << macro_name << "_const_in" << ind - << " -> "<< macro_name << ":in" << ind << " "; + text_buffer << macro_name << "_const_in" << ind + 1 + << " -> "<< macro_name << ":in" << ind + 1 << " "; else - text_buffer << macro_name << "_const_in" << ind << " -> " << macro_name << " "; + text_buffer << macro_name << "_const_in" << ind + 1 << " -> " << macro_name << " "; text_buffer << GetMacroEdgeParams_DOTfile(ind); dot_plik << text_buffer.str() << ";" << std::endl; @@ -1067,7 +1141,7 @@ void DSP::Component::ComponentToDOTfile(std::ofstream &dot_plik, for (ind_sep = 0; ind_sep < space_sep; ind_sep++) dot_plik << ' '; if (UsePorts_DOTfile() == true) - dot_plik << macro_input_name << ":out" << ind << " -> "; + dot_plik << macro_input_name << ":out" << ind + 1 << " -> "; else dot_plik << macro_input_name << " -> "; @@ -1101,7 +1175,7 @@ void DSP::Component::ComponentToDOTfile(std::ofstream &dot_plik, that_name = output_block->GetComponentName_DOTfile(); if (output_block->UsePorts_DOTfile() == true) - dot_plik << that_name << ":in" << output_block_input_no; + dot_plik << that_name << ":in" << output_block_input_no + 1; else dot_plik << that_name; } @@ -1110,7 +1184,7 @@ void DSP::Component::ComponentToDOTfile(std::ofstream &dot_plik, that_name = output_block->DOT_DrawAsMacro(DrawnMacro)->GetMacroName_DOTfile(); if (output_block->UsePorts_DOTfile() == true) - dot_plik << that_name << ":in" << ind; // just to macro input + dot_plik << that_name << ":in" << ind + 1; // just to macro input else dot_plik << that_name; } @@ -1153,7 +1227,7 @@ void DSP::Component::ComponentToDOTfile(std::ofstream &dot_plik, for (ind_sep = 0; ind_sep < space_sep; ind_sep++) dot_plik << ' '; text_buffer.clear(); text_buffer.str(""); - text_buffer << macro_output_name << "_const_in" << ind << " [shape=none,label=" + text_buffer << macro_output_name << "_const_in" << ind + 1 << " [shape=none,label=" << fixed << setprecision(3) << MacroOutput_block->ConstantInputValues[ind] << "];", dot_plik << text_buffer.str() << std::endl; @@ -1161,10 +1235,10 @@ void DSP::Component::ComponentToDOTfile(std::ofstream &dot_plik, dot_plik << ' '; text_buffer.clear(); text_buffer.str(""); if (UsePorts_DOTfile() == true) - text_buffer << macro_output_name << "_const_in" << ind - << " -> " << macro_output_name << ":in" << ind << " "; + text_buffer << macro_output_name << "_const_in" << ind + 1 + << " -> " << macro_output_name << ":in" << ind + 1 << " "; else - text_buffer << macro_output_name << "_const_in" << ind << " -> " << macro_output_name << " "; + text_buffer << macro_output_name << "_const_in" << ind + 1 << " -> " << macro_output_name << " "; text_buffer << GetMacroEdgeParams_DOTfile(ind); dot_plik << text_buffer.str() << ";" << std::endl; @@ -1234,12 +1308,12 @@ void DSP::Component::ComponentToDOTfile(std::ofstream &dot_plik, for (ind_sep = 0; ind_sep < space_sep; ind_sep++) dot_plik << ' '; if (input_block->UsePorts_DOTfile() == true) - dot_plik << that_name << ":out" << input_block_output_no << " -> "; + dot_plik << that_name << ":out" << input_block_output_no + 1 << " -> "; else dot_plik << that_name << " -> "; if (UsePorts_DOTfile() == true) - dot_plik << macro_output_name << ":in" << ind; + dot_plik << macro_output_name << ":in" << ind + 1; else dot_plik << macro_output_name; @@ -1504,17 +1578,17 @@ void DSP::Clock::SchemeToDOTfile(DSP::Clock_ptr ReferenceClock, const string &do { stringstream ss; //dot_plik << " subgraph cluster_CLOCKS {" << std::endl; - ss << " subgraph cluster_clock_group_" << ClocksList[0]->MasterClockIndex << " {"; + ss << " subgraph cluster_clock_group_" << ClocksList[0]->MasterClockIndex << " {"; dot_plik << ss.str() << std::endl; ss.clear(); ss.str(""); if (ClocksList[0] == MasterClocks[ClocksList[0]->MasterClockIndex]) { - ss << " clock_" << ClocksList[0] + ss << " clock_" << ClocksList[0] << " [shape=box,peripheries=2,label = \"cycle length=" << ClocksList[0]->cycle_length << "\",color=" << DOT_colors[0] << "];"; } else { - ss << " clock_" << ClocksList[0] + ss << " clock_" << ClocksList[0] <<" [shape=box,label = \"cycle length=" << ClocksList[0]->cycle_length << "\",color=" << DOT_colors[0] << "];"; } @@ -1526,41 +1600,41 @@ void DSP::Clock::SchemeToDOTfile(DSP::Clock_ptr ReferenceClock, const string &do { ss.clear(); ss.str(""); if (ClocksList[ind] == MasterClocks[ClocksList[ind]->MasterClockIndex]) { - ss << " clock_" << ClocksList[ind] + ss << " clock_" << ClocksList[ind] << " [shape=box,peripheries=2,label = \"cycle length=" << ClocksList[ind]->cycle_length << "\",color=" << DOT_colors[ClocksList[ind]->MasterClockIndex % DOT_colors.size()] << "];"; } else { - ss << " clock_" << ClocksList[ind] + ss << " clock_" << ClocksList[ind] << " [shape=box,label = \"cycle length=" << ClocksList[ind]->cycle_length << "\",color=" << DOT_colors[ClocksList[ind]->MasterClockIndex % DOT_colors.size()] << "];"; } dot_plik << ss.str() << std::endl; ss.clear(); ss.str(""); - ss << " clock_" << ClocksList[ind-1] + ss << " clock_" << ClocksList[ind-1] << " -> clock_" << ClocksList[ind] << ";"; dot_plik << ss.str() << std::endl; } else { ss.clear(); ss.str(""); - ss << " label = \"Clocks group #" << ClocksList[ind-1]->MasterClockIndex << "\";"; + ss << " label = \"Clocks group #" << ClocksList[ind-1]->MasterClockIndex << "\";"; dot_plik << ss.str() << std::endl; dot_plik << " }" << std::endl; ss.clear(); ss.str(""); - ss << " subgraph cluster_clock_group_" << ClocksList[ind]->MasterClockIndex << " {"; + ss << " subgraph cluster_clock_group_" << ClocksList[ind]->MasterClockIndex << " {"; dot_plik << ss.str() << std::endl; ss.clear(); ss.str(""); if (ClocksList[ind] == MasterClocks[ClocksList[ind]->MasterClockIndex]) { - ss << " clock_" << ClocksList[ind] + ss << " clock_" << ClocksList[ind] << " [shape=box,peripheries=2,label = \"cycle length=" << ClocksList[ind]->cycle_length << "\",color=" << DOT_colors[ClocksList[ind]->MasterClockIndex % DOT_colors.size()] << "];"; } else { - ss << " clock_" << ClocksList[ind] + ss << " clock_" << ClocksList[ind] << " [shape=box,label = \"cycle length=" << ClocksList[ind]->cycle_length << "\",color=" << DOT_colors[ClocksList[ind]->MasterClockIndex % DOT_colors.size()] << "];"; } @@ -1570,9 +1644,9 @@ void DSP::Clock::SchemeToDOTfile(DSP::Clock_ptr ReferenceClock, const string &do //ClocksList[ind]->M; } ss.clear(); ss.str(""); - ss << " label = \"Clocks group #" << ClocksList[ClocksList.size()-1]->MasterClockIndex << "\";"; + ss << " label = \"Clocks group #" << ClocksList[ClocksList.size()-1]->MasterClockIndex << "\";"; dot_plik << ss.str() << std::endl; - dot_plik << " }" << std::endl; + dot_plik << " }" << std::endl; //dot_plik << " label=\"Algorithm clocks\";" << std::endl; //dot_plik << " }" << std::endl; } diff --git a/src/include/DSP_lib.h b/src/include/DSP_lib.h index 48ec8cfc45844691ef0cb4705529a0e75d43c3e7..5bf12427107e965d4d425635e7cad451b0e6db2d 100644 --- a/src/include/DSP_lib.h +++ b/src/include/DSP_lib.h @@ -11,8 +11,8 @@ #define DSP_VER_MAJOR 0 #define DSP_VER_MINOR 20 -#define DSP_VER_BUILD 10 // !!! without zeroes before, else this will be treated as octal number -#define DSP_VER_YEAR 2021 +#define DSP_VER_BUILD 11 // !!! without zeroes before, else this will be treated as octal number +#define DSP_VER_YEAR 2023 #define DSP_VER DSP_VER_MAJOR.DSP_VER_MINOR.DSP_VER_BUILD //#define WINVER 0x0A00 diff --git a/src/include/DSP_modules.h b/src/include/DSP_modules.h index 9f5d9d5aa3de62970967c1f5087209969b3a0758..8201444a3346b1ae6c418c46fc777855fd49e9cd 100644 --- a/src/include/DSP_modules.h +++ b/src/include/DSP_modules.h @@ -1003,7 +1003,9 @@ class DSP::Component : public virtual DSP::name, public DSP::_connect_class */ virtual string GetComponentEdgeParams_DOTfile(const unsigned int &output_index = 0U); //! Returns component node parameters used in DOTfile - virtual string GetComponentNodeParams_DOTfile(); + virtual string GetComponentNodeParams_DOTfile(const string &leading_space); + //! Returns component node parameters used in DOTfile + virtual string GetComponentNodeParams_DOTfile(void); //! Returns true if ports should be used for edges virtual bool UsePorts_DOTfile(void); //! Writes component edges to file @@ -1020,7 +1022,7 @@ class DSP::Component : public virtual DSP::name, public DSP::_connect_class vector<bool> &UsedClocksTable, vector<DSP::Clock_ptr> &ClocksList, DSP::Macro_ptr DrawnMacro = NULL, DSP::Clock_ptr clock_ptr = NULL); - #endif + #endif /****************************/ /* Notifications support */ @@ -1187,7 +1189,8 @@ class DSP::Clock_trigger // friend void DSP::Component::ComponentToDOTfile(std::ofstream &dot_plik, //bool *ComponentDoneTable, long max_components_number, //DSP::Clock_ptr clock_ptr); - friend string DSP::Component::GetComponentNodeParams_DOTfile(); + friend string DSP::Component::GetComponentNodeParams_DOTfile(const string &leading_space); + friend string DSP::Component::GetComponentNodeParams_DOTfile(void); #endif protected: @@ -2023,7 +2026,8 @@ class DSP::u::Splitter : public DSP::Block #ifdef __DEBUG__ private: bool UsePorts_DOTfile(void); - string GetComponentNodeParams_DOTfile(); + string GetComponentNodeParams_DOTfile(const string &leading_space); + string GetComponentNodeParams_DOTfile(void); string GetComponentEdgeParams_DOTfile(const unsigned int &output_index); #endif