From bcf540cc00143851314d334a88ca3a652a62f86f Mon Sep 17 00:00:00 2001 From: revol-xut Date: Thu, 14 Jul 2022 10:18:34 +0200 Subject: [PATCH 01/23] removed +nightly command for cargo --- org.lflang/src/org/lflang/generator/rust/RustFileConfig.kt | 2 +- org.lflang/src/org/lflang/generator/rust/RustGenerator.kt | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/org.lflang/src/org/lflang/generator/rust/RustFileConfig.kt b/org.lflang/src/org/lflang/generator/rust/RustFileConfig.kt index 95e287d005..1b3dea0f14 100644 --- a/org.lflang/src/org/lflang/generator/rust/RustFileConfig.kt +++ b/org.lflang/src/org/lflang/generator/rust/RustFileConfig.kt @@ -38,7 +38,7 @@ class RustFileConfig(resource: Resource, srcGenBasePath: Path, useHierarchicalBi FileConfig(resource, srcGenBasePath, useHierarchicalBin) { /** - * Clean any artifacts produced by the C++ code generator. + * Clean any artifacts produced by the Rust code generator. */ @Throws(IOException::class) override fun doClean() { diff --git a/org.lflang/src/org/lflang/generator/rust/RustGenerator.kt b/org.lflang/src/org/lflang/generator/rust/RustGenerator.kt index 1032a03e51..22043d6c6c 100644 --- a/org.lflang/src/org/lflang/generator/rust/RustGenerator.kt +++ b/org.lflang/src/org/lflang/generator/rust/RustGenerator.kt @@ -91,10 +91,12 @@ class RustGenerator( private fun invokeRustCompiler(context: LFGeneratorContext, executableName: String, codeMaps: Map) { val args = mutableListOf().apply { + + // note that this option is unstable for now and requires rust nightly ... + // +nightly argument is a special argument that is only used by rustup + // the standard cargo does not take this argument this += listOf( - "+nightly", "build", - // note that this option is unstable for now and requires rust nightly ... "--out-dir", fileConfig.binPath.toAbsolutePath().toString(), "-Z", "unstable-options", // ... and that feature flag ) From 0c96a23ff7b4723e1a7e291e57bb6f82c307aec7 Mon Sep 17 00:00:00 2001 From: revol-xut Date: Wed, 27 Jul 2022 20:28:05 +0200 Subject: [PATCH 02/23] switched to PortBankCallBack --- lib/scripts/build.sh | 2 +- lib/scripts/launch.sh | 2 +- org.lflang/src/lib/cpp/lfutil.hh | 4 ++-- .../org/lflang/generator/cpp/CppAssembleMethodGenerator.kt | 6 +++--- org.lflang/src/org/lflang/generator/cpp/CppPortGenerator.kt | 2 +- .../src/org/lflang/generator/cpp/CppReactionGenerator.kt | 6 +++--- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/lib/scripts/build.sh b/lib/scripts/build.sh index 0191e98f39..8db92c5ced 100755 --- a/lib/scripts/build.sh +++ b/lib/scripts/build.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/nix/store/pmbgaqnvs9qlg7bp0knar9nmh5mcqivx-bash-interactive-5.1-p16/bin/bash #============================================================================ # Description: Build the Lingua Franca compiler. diff --git a/lib/scripts/launch.sh b/lib/scripts/launch.sh index 3208e5de54..04273e8029 100755 --- a/lib/scripts/launch.sh +++ b/lib/scripts/launch.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/nix/store/pmbgaqnvs9qlg7bp0knar9nmh5mcqivx-bash-interactive-5.1-p16/bin/bash #============================================================================ # Description: Run the Lingua Franca compiler. diff --git a/org.lflang/src/lib/cpp/lfutil.hh b/org.lflang/src/lib/cpp/lfutil.hh index 5b99e0aa35..d23b0ade04 100644 --- a/org.lflang/src/lib/cpp/lfutil.hh +++ b/org.lflang/src/lib/cpp/lfutil.hh @@ -65,8 +65,8 @@ class LFScope { template void bind_multiple_ports( - std::vector*>& left_ports, - std::vector*>& right_ports, + multiport::PortBankCallBack*>& left_ports, + multiport::PortBankCallBack*>& right_ports, bool repeat_left) { if (repeat_left) { diff --git a/org.lflang/src/org/lflang/generator/cpp/CppAssembleMethodGenerator.kt b/org.lflang/src/org/lflang/generator/cpp/CppAssembleMethodGenerator.kt index b9ac6cc00e..8e13416a65 100644 --- a/org.lflang/src/org/lflang/generator/cpp/CppAssembleMethodGenerator.kt +++ b/org.lflang/src/org/lflang/generator/cpp/CppAssembleMethodGenerator.kt @@ -174,9 +174,9 @@ class CppAssembleMethodGenerator(private val reactor: Reactor) { return with(PrependOperator) { """ |// connection $idx - |std::vector<$portType> __lf_left_ports_$idx; + |multiport::PortBankCallBack<$portType> __lf_left_ports_$idx; ${" |"..c.leftPorts.joinToString("\n") { addAllPortsToVector(it, "__lf_left_ports_$idx") }} - |std::vector<$portType> __lf_right_ports_$idx; + |multiport::PortBankCallBack<$portType> __lf_right_ports_$idx; ${" |"..c.rightPorts.joinToString("\n") { addAllPortsToVector(it, "__lf_right_ports_$idx") }} |lfutil::bind_multiple_ports(__lf_left_ports_$idx, __lf_right_ports_$idx, ${c.isIterated}); """.trimMargin() @@ -201,4 +201,4 @@ class CppAssembleMethodGenerator(private val reactor: Reactor) { |} """.trimMargin() } -} \ No newline at end of file +} diff --git a/org.lflang/src/org/lflang/generator/cpp/CppPortGenerator.kt b/org.lflang/src/org/lflang/generator/cpp/CppPortGenerator.kt index 448d8ecaad..e43a0296cb 100644 --- a/org.lflang/src/org/lflang/generator/cpp/CppPortGenerator.kt +++ b/org.lflang/src/org/lflang/generator/cpp/CppPortGenerator.kt @@ -53,7 +53,7 @@ class CppPortGenerator(private val reactor: Reactor) { val dataType = inferredType.cppType return if (isMultiport) { - "std::vector<$portType<$dataType>>" + "multiport::PortBankCallBack<$portType<$dataType>>" } else { "$portType<$dataType>" } diff --git a/org.lflang/src/org/lflang/generator/cpp/CppReactionGenerator.kt b/org.lflang/src/org/lflang/generator/cpp/CppReactionGenerator.kt index 87d469f4cc..a3b4cccb62 100644 --- a/org.lflang/src/org/lflang/generator/cpp/CppReactionGenerator.kt +++ b/org.lflang/src/org/lflang/generator/cpp/CppReactionGenerator.kt @@ -82,7 +82,7 @@ class CppReactionGenerator( allUncontainedSources.map { "const ${it.cppType}& ${it.name}" } + allUncontainedEffects.map { "${it.cppType}& ${it.name}" } + allReferencedContainers.map { - if (it.isBank) "const std::vector<${getViewClassName(it)}>& ${it.name}" + if (it.isBank) "const multiport::PortBankCallBack<${getViewClassName(it)}>& ${it.name}" else "${getViewClassName(it)}& ${it.name}" } @@ -176,7 +176,7 @@ class CppReactionGenerator( val initializers = variables.map { "${it.variable.name}(reactor->${it.variable.name})" } val viewDeclaration = - if (container.isBank) "std::vector<$viewClass> $viewInstance;" + if (container.isBank) "multiport::PortBankCallBack<$viewClass> $viewInstance;" else "$viewClass $viewInstance;" return with(PrependOperator) { @@ -247,4 +247,4 @@ class CppReactionGenerator( /** Get all definitions of deadline handlers. */ fun generateDeadlineHandlerDefinitions() = reactionsWithDeadlines.joinToString(separator = "\n", postfix = "\n") { generateDeadlineHandlerDefinition(it) } -} \ No newline at end of file +} From e90180242f0507850ef68281732779c2ae7c326c Mon Sep 17 00:00:00 2001 From: revol-xut Date: Sun, 31 Jul 2022 05:44:22 +0200 Subject: [PATCH 03/23] first working version --- org.lflang/src/lib/cpp/lfutil.hh | 4 ++-- .../org/lflang/generator/cpp/CppAssembleMethodGenerator.kt | 4 ++-- org.lflang/src/org/lflang/generator/cpp/CppPortGenerator.kt | 2 +- .../src/org/lflang/generator/cpp/CppReactorGenerator.kt | 1 - 4 files changed, 5 insertions(+), 6 deletions(-) diff --git a/org.lflang/src/lib/cpp/lfutil.hh b/org.lflang/src/lib/cpp/lfutil.hh index d23b0ade04..5b99e0aa35 100644 --- a/org.lflang/src/lib/cpp/lfutil.hh +++ b/org.lflang/src/lib/cpp/lfutil.hh @@ -65,8 +65,8 @@ class LFScope { template void bind_multiple_ports( - multiport::PortBankCallBack*>& left_ports, - multiport::PortBankCallBack*>& right_ports, + std::vector*>& left_ports, + std::vector*>& right_ports, bool repeat_left) { if (repeat_left) { diff --git a/org.lflang/src/org/lflang/generator/cpp/CppAssembleMethodGenerator.kt b/org.lflang/src/org/lflang/generator/cpp/CppAssembleMethodGenerator.kt index 8e13416a65..32ba3c27d5 100644 --- a/org.lflang/src/org/lflang/generator/cpp/CppAssembleMethodGenerator.kt +++ b/org.lflang/src/org/lflang/generator/cpp/CppAssembleMethodGenerator.kt @@ -174,9 +174,9 @@ class CppAssembleMethodGenerator(private val reactor: Reactor) { return with(PrependOperator) { """ |// connection $idx - |multiport::PortBankCallBack<$portType> __lf_left_ports_$idx; + |std::vector<$portType> __lf_left_ports_$idx; ${" |"..c.leftPorts.joinToString("\n") { addAllPortsToVector(it, "__lf_left_ports_$idx") }} - |multiport::PortBankCallBack<$portType> __lf_right_ports_$idx; + |std::vector<$portType> __lf_right_ports_$idx; ${" |"..c.rightPorts.joinToString("\n") { addAllPortsToVector(it, "__lf_right_ports_$idx") }} |lfutil::bind_multiple_ports(__lf_left_ports_$idx, __lf_right_ports_$idx, ${c.isIterated}); """.trimMargin() diff --git a/org.lflang/src/org/lflang/generator/cpp/CppPortGenerator.kt b/org.lflang/src/org/lflang/generator/cpp/CppPortGenerator.kt index e43a0296cb..8c1ae8b0a0 100644 --- a/org.lflang/src/org/lflang/generator/cpp/CppPortGenerator.kt +++ b/org.lflang/src/org/lflang/generator/cpp/CppPortGenerator.kt @@ -66,7 +66,7 @@ class CppPortGenerator(private val reactor: Reactor) { ${name}.reserve($width); for (size_t __lf_idx = 0; __lf_idx < $width; __lf_idx++) { std::string __lf_port_name = "${name}_" + std::to_string(__lf_idx); - ${name}.emplace_back(__lf_port_name, this); + ${name}.emplace_back(__lf_port_name, this, ${name}.get_active_ports(), __lf_idx); } """.trimIndent() } diff --git a/org.lflang/src/org/lflang/generator/cpp/CppReactorGenerator.kt b/org.lflang/src/org/lflang/generator/cpp/CppReactorGenerator.kt index 85556a83a9..d93925afbe 100644 --- a/org.lflang/src/org/lflang/generator/cpp/CppReactorGenerator.kt +++ b/org.lflang/src/org/lflang/generator/cpp/CppReactorGenerator.kt @@ -21,7 +21,6 @@ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***************/ - package org.lflang.generator.cpp import org.lflang.ErrorReporter From 75db7c900c9cd5ba1e35f62beae4b9fe24fa3c74 Mon Sep 17 00:00:00 2001 From: revol-xut Date: Mon, 1 Aug 2022 10:59:16 +0200 Subject: [PATCH 04/23] add active_ports_indices() to all multiports --- test/Cpp/src/multiport/BankSelfBroadcast.lf | 10 +++++++--- test/Cpp/src/multiport/BankToBankMultiport.lf | 6 ++++-- .../src/multiport/BankToBankMultiportAfter.lf | 5 +++-- test/Cpp/src/multiport/FullyConnected.lf | 9 ++++----- .../src/multiport/FullyConnectedAddressable.lf | 11 +++++------ .../src/multiport/MultiportFromHierarchy.lf | 6 ++++-- test/Cpp/src/multiport/MultiportOut.lf | 4 ++-- test/Cpp/src/multiport/MultiportToHierarchy.lf | 5 +++-- .../Cpp/src/multiport/MultiportToMultiport2.lf | 18 ++++++++---------- .../src/multiport/MultiportToMultiportArray.lf | 10 ++++------ 10 files changed, 44 insertions(+), 40 deletions(-) diff --git a/test/Cpp/src/multiport/BankSelfBroadcast.lf b/test/Cpp/src/multiport/BankSelfBroadcast.lf index 6373484a8d..e9bb3367cc 100644 --- a/test/Cpp/src/multiport/BankSelfBroadcast.lf +++ b/test/Cpp/src/multiport/BankSelfBroadcast.lf @@ -16,10 +16,14 @@ reactor A(bank_index:size_t(0)) { out.set(bank_index); =} reaction(in) {= + auto activated_ports = in.active_ports_indices(); + + auto contained = [&](std::size_t value) { + return std::find(std::begin(activated_ports), std::end(activated_ports), value) != std::end(activated_ports); + }; + for (size_t i = 0; i < in.size(); i++) { - if (in[i].is_present()) { - std::cout << "Reactor " << bank_index << " received " - << *in[i].get() << " on channel " << i << '\n'; + if (in[i].is_present() && contained(i)) { if (*in[i].get() != i) { std::cerr << "ERROR: Expected " << i << '\n'; exit(1); diff --git a/test/Cpp/src/multiport/BankToBankMultiport.lf b/test/Cpp/src/multiport/BankToBankMultiport.lf index 7a31b339a0..0a75de161f 100644 --- a/test/Cpp/src/multiport/BankToBankMultiport.lf +++ b/test/Cpp/src/multiport/BankToBankMultiport.lf @@ -18,9 +18,11 @@ reactor Destination(width:size_t(1)) { input[width] in:int; reaction(in) {= int sum = 0; - for (size_t i = 0; i < in.size(); i++) { - if (in[i].is_present()) sum += *in[i].get(); + + for (auto i : in.active_ports_indices()) { + sum += *in[i].get(); } + std::cout << "Sum of received: " << sum << ".\n"; if (sum != s) { std::cerr << "ERROR: Expected " << s << ".\n"; diff --git a/test/Cpp/src/multiport/BankToBankMultiportAfter.lf b/test/Cpp/src/multiport/BankToBankMultiportAfter.lf index 1710f6ee5f..00b039c123 100644 --- a/test/Cpp/src/multiport/BankToBankMultiportAfter.lf +++ b/test/Cpp/src/multiport/BankToBankMultiportAfter.lf @@ -27,9 +27,10 @@ reactor Destination(width:size_t(1)) { } int sum = 0; - for (size_t i = 0; i < in.size(); i++) { - if (in[i].is_present()) sum += *in[i].get(); + for (auto i : in.active_ports_indices()) { + sum += *in[i].get(); } + std::cout << "Sum of received: " << sum << '\n'; if (sum != s) { std::cerr << "ERROR: Expected " << s << '\n'; diff --git a/test/Cpp/src/multiport/FullyConnected.lf b/test/Cpp/src/multiport/FullyConnected.lf index 9b0233d43e..dc5d9cef92 100644 --- a/test/Cpp/src/multiport/FullyConnected.lf +++ b/test/Cpp/src/multiport/FullyConnected.lf @@ -17,12 +17,11 @@ reactor Node(bank_index: size_t(0), num_nodes: size_t(4)) { std::cout << "Node " << bank_index << " received messages from "; received = true; size_t count{0}; - for (auto& port : in) { - if (port.is_present()) { - count++; - std::cout << *port.get() << ", "; - } + for (auto i: in.active_ports_indices()) { + count++; + std::cout << *in[i].get() << ", "; } + std::cout << '\n'; if (count != num_nodes) { std::cerr << "ERROR: received less messages than expected!"; diff --git a/test/Cpp/src/multiport/FullyConnectedAddressable.lf b/test/Cpp/src/multiport/FullyConnectedAddressable.lf index bac6f76fba..562b6d58b0 100644 --- a/test/Cpp/src/multiport/FullyConnectedAddressable.lf +++ b/test/Cpp/src/multiport/FullyConnectedAddressable.lf @@ -20,13 +20,12 @@ reactor Node(bank_index: size_t(0), num_nodes: size_t(4)) { received = true; size_t count{0}; size_t result{0}; - for (auto& port : in) { - if (port.is_present()) { - count++; - result = *port.get(); - std::cout << result << ", "; - } + for (auto i : in.active_ports_indices()) { + count++; + result = *in[i].get(); + std::cout << result << ", "; } + std::cout << '\n'; size_t expected = bank_index == 0 ? num_nodes - 1 : bank_index - 1; diff --git a/test/Cpp/src/multiport/MultiportFromHierarchy.lf b/test/Cpp/src/multiport/MultiportFromHierarchy.lf index a9454c5730..d85dddebf8 100644 --- a/test/Cpp/src/multiport/MultiportFromHierarchy.lf +++ b/test/Cpp/src/multiport/MultiportFromHierarchy.lf @@ -17,10 +17,12 @@ reactor Destination { state s:int(6); input[4] in:int; reaction(in) {= + int sum = 0; - for (int i = 0; i < in.size(); i++) { - if (in[i].is_present()) sum += *in[i].get(); + for (auto i : in.active_ports_indices()) { + sum += *in[i].get(); } + std::cout << "Sum of received: " << sum << ".\n"; if (sum != s) { std::cerr << "ERROR: Expected " << s << ".\n"; diff --git a/test/Cpp/src/multiport/MultiportOut.lf b/test/Cpp/src/multiport/MultiportOut.lf index 0d86c22c37..80fbcd5dba 100644 --- a/test/Cpp/src/multiport/MultiportOut.lf +++ b/test/Cpp/src/multiport/MultiportOut.lf @@ -30,8 +30,8 @@ reactor Destination { input[4] in:int; reaction(in) {= int sum = 0; - for (int i = 0; i < in.size(); i++) { - if (in[i].is_present()) sum += *in[i].get(); + for (auto i : in.active_ports_indices()) { + sum += *in[i].get(); } std::cout << "Sum of received: " << sum << ".\n"; if (sum != s) { diff --git a/test/Cpp/src/multiport/MultiportToHierarchy.lf b/test/Cpp/src/multiport/MultiportToHierarchy.lf index d7fb946dea..5ac5c507b2 100644 --- a/test/Cpp/src/multiport/MultiportToHierarchy.lf +++ b/test/Cpp/src/multiport/MultiportToHierarchy.lf @@ -19,9 +19,10 @@ reactor Destination(width:size_t(4)) { input[width] in:int; reaction(in) {= int sum = 0; - for (size_t i = 0; i < in.size(); i++) { - if (in[i].is_present()) sum += *in[i].get(); + for (auto i : in.active_ports_indices()) { + sum += *in[i].get(); } + std::cout << "Sum of received: " << sum << ".\n"; if (sum != s) { std::cerr << "ERROR: Expected " << s << ".\n"; diff --git a/test/Cpp/src/multiport/MultiportToMultiport2.lf b/test/Cpp/src/multiport/MultiportToMultiport2.lf index 0ea63c75fd..c61f068746 100644 --- a/test/Cpp/src/multiport/MultiportToMultiport2.lf +++ b/test/Cpp/src/multiport/MultiportToMultiport2.lf @@ -14,16 +14,14 @@ reactor Source(width:size_t(2)) { reactor Destination(width:size_t(2)) { input[width] in:size_t; reaction (in) {= - for (size_t i = 0; i < in.size(); i++) { - if (in[i].is_present()) { - size_t value = *in[i].get(); - std::cout << "Received on channel " << i << ": " << value << '\n'; - // NOTE: For testing purposes, this assumes the specific - // widths instantiated below. - if (value != i % 3) { - std::cerr << "ERROR: expected " << i % 3 << '\n'; - exit(1); - } + for (auto i: in.active_ports_indices()) { + size_t value = *in[i].get(); + std::cout << "Received on channel " << i << ": " << value << '\n'; + // NOTE: For testing purposes, this assumes the specific + // widths instantiated below. + if (value != i % 3) { + std::cerr << "ERROR: expected " << i % 3 << '\n'; + exit(1); } } =} diff --git a/test/Cpp/src/multiport/MultiportToMultiportArray.lf b/test/Cpp/src/multiport/MultiportToMultiportArray.lf index 21e95cd2a8..ceac4ae30d 100644 --- a/test/Cpp/src/multiport/MultiportToMultiportArray.lf +++ b/test/Cpp/src/multiport/MultiportToMultiportArray.lf @@ -27,12 +27,10 @@ reactor Destination { input[2] in:int[3]; reaction(in) {= int sum = 0; - for (size_t i = 0; i < in.size(); i++) { - if (in[i].is_present()) { - const auto& a = *in[i].get(); - for (int j = 0; j < a.size(); j++) { - sum += a[j]; - } + for (auto i : in.active_ports_indices()) { + const auto& a = *in[i].get(); + for (int j = 0; j < a.size(); j++) { + sum += a[j]; } } std::cout << "Sum of received: " << sum << '\n'; From d702b0ca4b1ba3f33f06ea3e9927becabb6b3f51 Mon Sep 17 00:00:00 2001 From: revol-xut Date: Mon, 1 Aug 2022 12:54:45 +0200 Subject: [PATCH 05/23] checked out multiports branch --- org.lflang/src/lib/cpp/reactor-cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/org.lflang/src/lib/cpp/reactor-cpp b/org.lflang/src/lib/cpp/reactor-cpp index dae853f4e9..120b79f332 160000 --- a/org.lflang/src/lib/cpp/reactor-cpp +++ b/org.lflang/src/lib/cpp/reactor-cpp @@ -1 +1 @@ -Subproject commit dae853f4e99097953c04432602fcd19da51749a3 +Subproject commit 120b79f3322120c6e0f4a62726dd2ad9f80efcbe From e54cd9b693a9e0d993baa9fb71a5b6554a375c36 Mon Sep 17 00:00:00 2001 From: revol-xut Date: Mon, 1 Aug 2022 13:54:36 +0200 Subject: [PATCH 06/23] fixed shebangs --- lib/scripts/build.sh | 2 +- lib/scripts/launch.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/scripts/build.sh b/lib/scripts/build.sh index 8db92c5ced..0191e98f39 100755 --- a/lib/scripts/build.sh +++ b/lib/scripts/build.sh @@ -1,4 +1,4 @@ -#!/nix/store/pmbgaqnvs9qlg7bp0knar9nmh5mcqivx-bash-interactive-5.1-p16/bin/bash +#!/bin/bash #============================================================================ # Description: Build the Lingua Franca compiler. diff --git a/lib/scripts/launch.sh b/lib/scripts/launch.sh index 04273e8029..3208e5de54 100755 --- a/lib/scripts/launch.sh +++ b/lib/scripts/launch.sh @@ -1,4 +1,4 @@ -#!/nix/store/pmbgaqnvs9qlg7bp0knar9nmh5mcqivx-bash-interactive-5.1-p16/bin/bash +#!/bin/bash #============================================================================ # Description: Run the Lingua Franca compiler. From df1da52f4f66a5f098c00fea509680a16557f4b2 Mon Sep 17 00:00:00 2001 From: revol-xut Date: Mon, 1 Aug 2022 15:01:26 +0200 Subject: [PATCH 07/23] reverted versions of submodules --- org.lflang/src/lib/c/reactor-c | 2 +- org.lflang/src/lib/py/reactor-c-py | 2 +- org.lflang/src/lib/ts/reactor-ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/org.lflang/src/lib/c/reactor-c b/org.lflang/src/lib/c/reactor-c index 4d300d934e..0a197940fa 160000 --- a/org.lflang/src/lib/c/reactor-c +++ b/org.lflang/src/lib/c/reactor-c @@ -1 +1 @@ -Subproject commit 4d300d934e3e52b79592633cc9bbffac74376f33 +Subproject commit 0a197940fae3194145eae136e1726d6a26c27b57 diff --git a/org.lflang/src/lib/py/reactor-c-py b/org.lflang/src/lib/py/reactor-c-py index 64292fa820..61433a39c9 160000 --- a/org.lflang/src/lib/py/reactor-c-py +++ b/org.lflang/src/lib/py/reactor-c-py @@ -1 +1 @@ -Subproject commit 64292fa820f6fdd86226cd3016c4afa802b87541 +Subproject commit 61433a39c98d6cdec3e317ce3692e98abadcc5fc diff --git a/org.lflang/src/lib/ts/reactor-ts b/org.lflang/src/lib/ts/reactor-ts index 01b16f91c8..811c2413d6 160000 --- a/org.lflang/src/lib/ts/reactor-ts +++ b/org.lflang/src/lib/ts/reactor-ts @@ -1 +1 @@ -Subproject commit 01b16f91c88782d218ef24569749076f5221e768 +Subproject commit 811c2413d6be638b6af2d0e1002972bdeda3ee9f From 1de6806d7200ae19f14991efe014218055343c0d Mon Sep 17 00:00:00 2001 From: revol-xut Date: Wed, 3 Aug 2022 15:45:15 +0200 Subject: [PATCH 08/23] add CallbackTest --- test/Cpp/src/multiport/CallbackMultiport.lf | 61 +++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 test/Cpp/src/multiport/CallbackMultiport.lf diff --git a/test/Cpp/src/multiport/CallbackMultiport.lf b/test/Cpp/src/multiport/CallbackMultiport.lf new file mode 100644 index 0000000000..a4c5b5da1e --- /dev/null +++ b/test/Cpp/src/multiport/CallbackMultiport.lf @@ -0,0 +1,61 @@ +// Test bank of reactors to multiport input with id parameter in the bank. +target Cpp; + +reactor Test { + input[3000] sink: void; + output[3000] source: void; + + + reaction (sink) -> source {= + for (auto i: sink.active_ports_indices()) { + source[i].set(); + } + =} +} + +main reactor CallbackMultiport { + test = new Test(); + state received:bool(false); + + reaction (startup) -> test.sink {= + for (auto i = 0; i < 30; i++) { + auto semi_random_index = (i * 100) % 3000; + test.sink[semi_random_index].set(); + } + =} + + reaction (test.source) {= + received = true; + std::vector positions; + + for (auto i = 0; i < 30; i++) { + auto semi_random_index = (i * 100) % 3000; + positions.push_back(semi_random_index); + } + + auto received_indices = test.source.active_ports_indices(); + + if (positions.size() != received_indices.size()) { + std::cerr << "positions size:" << positions.size() + << " indices size:" << received_indices.size() << std::endl; + throw std::runtime_error("not matching sizes"); + } + + for (auto i = 0; i < positions.size(); i++) { + if (positions[i] != received_indices[i]) { + std::cout << "mismatching:" << positions[i] << "|" << received_indices[i] << std::endl; + throw std::runtime_error("indices do not match"); + } + } + + std::cout << "[SUCCESS] all indices match" << std::endl; + =} + + reaction (shutdown) {= + if (!received) { + std::cerr << "Error: received no input!\n"; + exit(2); + } + =} +} + From bbb7b0897d8132807dbdc8628682a0e182fffa73 Mon Sep 17 00:00:00 2001 From: revol-xut Date: Thu, 25 Aug 2022 11:28:24 +0200 Subject: [PATCH 09/23] renamed class to Multiport --- org.lflang/src/org/lflang/generator/cpp/CppPortGenerator.kt | 2 +- .../src/org/lflang/generator/cpp/CppReactionGenerator.kt | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/org.lflang/src/org/lflang/generator/cpp/CppPortGenerator.kt b/org.lflang/src/org/lflang/generator/cpp/CppPortGenerator.kt index 8c1ae8b0a0..07c1b7bb24 100644 --- a/org.lflang/src/org/lflang/generator/cpp/CppPortGenerator.kt +++ b/org.lflang/src/org/lflang/generator/cpp/CppPortGenerator.kt @@ -53,7 +53,7 @@ class CppPortGenerator(private val reactor: Reactor) { val dataType = inferredType.cppType return if (isMultiport) { - "multiport::PortBankCallBack<$portType<$dataType>>" + "reactor::Multiport<$portType<$dataType>>" } else { "$portType<$dataType>" } diff --git a/org.lflang/src/org/lflang/generator/cpp/CppReactionGenerator.kt b/org.lflang/src/org/lflang/generator/cpp/CppReactionGenerator.kt index a3b4cccb62..cb39c8357f 100644 --- a/org.lflang/src/org/lflang/generator/cpp/CppReactionGenerator.kt +++ b/org.lflang/src/org/lflang/generator/cpp/CppReactionGenerator.kt @@ -82,7 +82,7 @@ class CppReactionGenerator( allUncontainedSources.map { "const ${it.cppType}& ${it.name}" } + allUncontainedEffects.map { "${it.cppType}& ${it.name}" } + allReferencedContainers.map { - if (it.isBank) "const multiport::PortBankCallBack<${getViewClassName(it)}>& ${it.name}" + if (it.isBank) "const reactor::Multiport<${getViewClassName(it)}>& ${it.name}" else "${getViewClassName(it)}& ${it.name}" } @@ -176,7 +176,7 @@ class CppReactionGenerator( val initializers = variables.map { "${it.variable.name}(reactor->${it.variable.name})" } val viewDeclaration = - if (container.isBank) "multiport::PortBankCallBack<$viewClass> $viewInstance;" + if (container.isBank) "reactor::Multiport<$viewClass> $viewInstance;" else "$viewClass $viewInstance;" return with(PrependOperator) { From 9f79e6dceebb54eb4e433856b7d679b3f58e34c8 Mon Sep 17 00:00:00 2001 From: revol-xut Date: Mon, 5 Sep 2022 11:55:21 +0200 Subject: [PATCH 10/23] renamed function from active_ports_indices to get_present_port_indices --- org.lflang/src/lib/c/reactor-c | 2 +- org.lflang/src/lib/ts/reactor-ts | 2 +- test/Cpp/src/multiport/BankSelfBroadcast.lf | 2 +- test/Cpp/src/multiport/BankToBankMultiport.lf | 2 +- test/Cpp/src/multiport/BankToBankMultiportAfter.lf | 2 +- test/Cpp/src/multiport/CallbackMultiport.lf | 4 ++-- test/Cpp/src/multiport/FullyConnected.lf | 2 +- test/Cpp/src/multiport/FullyConnectedAddressable.lf | 2 +- test/Cpp/src/multiport/MultiportFromHierarchy.lf | 2 +- test/Cpp/src/multiport/MultiportOut.lf | 2 +- test/Cpp/src/multiport/MultiportToHierarchy.lf | 2 +- test/Cpp/src/multiport/MultiportToMultiport2.lf | 2 +- test/Cpp/src/multiport/MultiportToMultiportArray.lf | 2 +- 13 files changed, 14 insertions(+), 14 deletions(-) diff --git a/org.lflang/src/lib/c/reactor-c b/org.lflang/src/lib/c/reactor-c index b9549a5f3a..0a197940fa 160000 --- a/org.lflang/src/lib/c/reactor-c +++ b/org.lflang/src/lib/c/reactor-c @@ -1 +1 @@ -Subproject commit b9549a5f3a8d2fe49bfbad3e7e7d04364baf6494 +Subproject commit 0a197940fae3194145eae136e1726d6a26c27b57 diff --git a/org.lflang/src/lib/ts/reactor-ts b/org.lflang/src/lib/ts/reactor-ts index e5c9020c39..811c2413d6 160000 --- a/org.lflang/src/lib/ts/reactor-ts +++ b/org.lflang/src/lib/ts/reactor-ts @@ -1 +1 @@ -Subproject commit e5c9020c3971868b0670b0d78116e38ca64741a5 +Subproject commit 811c2413d6be638b6af2d0e1002972bdeda3ee9f diff --git a/test/Cpp/src/multiport/BankSelfBroadcast.lf b/test/Cpp/src/multiport/BankSelfBroadcast.lf index e9bb3367cc..2be8fa60fc 100644 --- a/test/Cpp/src/multiport/BankSelfBroadcast.lf +++ b/test/Cpp/src/multiport/BankSelfBroadcast.lf @@ -16,7 +16,7 @@ reactor A(bank_index:size_t(0)) { out.set(bank_index); =} reaction(in) {= - auto activated_ports = in.active_ports_indices(); + auto activated_ports = in.get_present_port_indices(); auto contained = [&](std::size_t value) { return std::find(std::begin(activated_ports), std::end(activated_ports), value) != std::end(activated_ports); diff --git a/test/Cpp/src/multiport/BankToBankMultiport.lf b/test/Cpp/src/multiport/BankToBankMultiport.lf index 0a75de161f..a3f815d9ca 100644 --- a/test/Cpp/src/multiport/BankToBankMultiport.lf +++ b/test/Cpp/src/multiport/BankToBankMultiport.lf @@ -19,7 +19,7 @@ reactor Destination(width:size_t(1)) { reaction(in) {= int sum = 0; - for (auto i : in.active_ports_indices()) { + for (auto i : in.get_present_port_indices()) { sum += *in[i].get(); } diff --git a/test/Cpp/src/multiport/BankToBankMultiportAfter.lf b/test/Cpp/src/multiport/BankToBankMultiportAfter.lf index 00b039c123..9a5681d971 100644 --- a/test/Cpp/src/multiport/BankToBankMultiportAfter.lf +++ b/test/Cpp/src/multiport/BankToBankMultiportAfter.lf @@ -27,7 +27,7 @@ reactor Destination(width:size_t(1)) { } int sum = 0; - for (auto i : in.active_ports_indices()) { + for (auto i : in.get_present_port_indices()) { sum += *in[i].get(); } diff --git a/test/Cpp/src/multiport/CallbackMultiport.lf b/test/Cpp/src/multiport/CallbackMultiport.lf index a4c5b5da1e..6fb90dc3be 100644 --- a/test/Cpp/src/multiport/CallbackMultiport.lf +++ b/test/Cpp/src/multiport/CallbackMultiport.lf @@ -7,7 +7,7 @@ reactor Test { reaction (sink) -> source {= - for (auto i: sink.active_ports_indices()) { + for (auto i: sink.get_present_port_indices()) { source[i].set(); } =} @@ -33,7 +33,7 @@ main reactor CallbackMultiport { positions.push_back(semi_random_index); } - auto received_indices = test.source.active_ports_indices(); + auto received_indices = test.source.get_present_port_indices(); if (positions.size() != received_indices.size()) { std::cerr << "positions size:" << positions.size() diff --git a/test/Cpp/src/multiport/FullyConnected.lf b/test/Cpp/src/multiport/FullyConnected.lf index dc5d9cef92..a74b0a24fc 100644 --- a/test/Cpp/src/multiport/FullyConnected.lf +++ b/test/Cpp/src/multiport/FullyConnected.lf @@ -17,7 +17,7 @@ reactor Node(bank_index: size_t(0), num_nodes: size_t(4)) { std::cout << "Node " << bank_index << " received messages from "; received = true; size_t count{0}; - for (auto i: in.active_ports_indices()) { + for (auto i: in.get_present_port_indices()) { count++; std::cout << *in[i].get() << ", "; } diff --git a/test/Cpp/src/multiport/FullyConnectedAddressable.lf b/test/Cpp/src/multiport/FullyConnectedAddressable.lf index 562b6d58b0..4a0e8b95ad 100644 --- a/test/Cpp/src/multiport/FullyConnectedAddressable.lf +++ b/test/Cpp/src/multiport/FullyConnectedAddressable.lf @@ -20,7 +20,7 @@ reactor Node(bank_index: size_t(0), num_nodes: size_t(4)) { received = true; size_t count{0}; size_t result{0}; - for (auto i : in.active_ports_indices()) { + for (auto i : in.get_present_port_indices()) { count++; result = *in[i].get(); std::cout << result << ", "; diff --git a/test/Cpp/src/multiport/MultiportFromHierarchy.lf b/test/Cpp/src/multiport/MultiportFromHierarchy.lf index d85dddebf8..732595368d 100644 --- a/test/Cpp/src/multiport/MultiportFromHierarchy.lf +++ b/test/Cpp/src/multiport/MultiportFromHierarchy.lf @@ -19,7 +19,7 @@ reactor Destination { reaction(in) {= int sum = 0; - for (auto i : in.active_ports_indices()) { + for (auto i : in.get_present_port_indices()) { sum += *in[i].get(); } diff --git a/test/Cpp/src/multiport/MultiportOut.lf b/test/Cpp/src/multiport/MultiportOut.lf index 80fbcd5dba..5d6b31f697 100644 --- a/test/Cpp/src/multiport/MultiportOut.lf +++ b/test/Cpp/src/multiport/MultiportOut.lf @@ -30,7 +30,7 @@ reactor Destination { input[4] in:int; reaction(in) {= int sum = 0; - for (auto i : in.active_ports_indices()) { + for (auto i : in.get_present_port_indices()) { sum += *in[i].get(); } std::cout << "Sum of received: " << sum << ".\n"; diff --git a/test/Cpp/src/multiport/MultiportToHierarchy.lf b/test/Cpp/src/multiport/MultiportToHierarchy.lf index 5ac5c507b2..2f2d2d63b2 100644 --- a/test/Cpp/src/multiport/MultiportToHierarchy.lf +++ b/test/Cpp/src/multiport/MultiportToHierarchy.lf @@ -19,7 +19,7 @@ reactor Destination(width:size_t(4)) { input[width] in:int; reaction(in) {= int sum = 0; - for (auto i : in.active_ports_indices()) { + for (auto i : in.get_present_port_indices()) { sum += *in[i].get(); } diff --git a/test/Cpp/src/multiport/MultiportToMultiport2.lf b/test/Cpp/src/multiport/MultiportToMultiport2.lf index c61f068746..f279349cd7 100644 --- a/test/Cpp/src/multiport/MultiportToMultiport2.lf +++ b/test/Cpp/src/multiport/MultiportToMultiport2.lf @@ -14,7 +14,7 @@ reactor Source(width:size_t(2)) { reactor Destination(width:size_t(2)) { input[width] in:size_t; reaction (in) {= - for (auto i: in.active_ports_indices()) { + for (auto i: in.get_present_port_indices()) { size_t value = *in[i].get(); std::cout << "Received on channel " << i << ": " << value << '\n'; // NOTE: For testing purposes, this assumes the specific diff --git a/test/Cpp/src/multiport/MultiportToMultiportArray.lf b/test/Cpp/src/multiport/MultiportToMultiportArray.lf index ceac4ae30d..f1699dce45 100644 --- a/test/Cpp/src/multiport/MultiportToMultiportArray.lf +++ b/test/Cpp/src/multiport/MultiportToMultiportArray.lf @@ -27,7 +27,7 @@ reactor Destination { input[2] in:int[3]; reaction(in) {= int sum = 0; - for (auto i : in.active_ports_indices()) { + for (auto i : in.get_present_port_indices()) { const auto& a = *in[i].get(); for (int j = 0; j < a.size(); j++) { sum += a[j]; From 8d677ce946fde498e978ae92de0d9d7aa880af22 Mon Sep 17 00:00:00 2001 From: revol-xut Date: Fri, 9 Sep 2022 10:40:56 +0200 Subject: [PATCH 11/23] fixed test --- lib/scripts/launch.sh | 2 +- test/Cpp/src/multiport/BankSelfBroadcast.lf | 9 ++------- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/lib/scripts/launch.sh b/lib/scripts/launch.sh index 3208e5de54..a1a938556e 100755 --- a/lib/scripts/launch.sh +++ b/lib/scripts/launch.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/lfc #============================================================================ # Description: Run the Lingua Franca compiler. diff --git a/test/Cpp/src/multiport/BankSelfBroadcast.lf b/test/Cpp/src/multiport/BankSelfBroadcast.lf index 2be8fa60fc..16096b24bf 100644 --- a/test/Cpp/src/multiport/BankSelfBroadcast.lf +++ b/test/Cpp/src/multiport/BankSelfBroadcast.lf @@ -15,15 +15,10 @@ reactor A(bank_index:size_t(0)) { reaction(startup) -> out {= out.set(bank_index); =} - reaction(in) {= - auto activated_ports = in.get_present_port_indices(); - - auto contained = [&](std::size_t value) { - return std::find(std::begin(activated_ports), std::end(activated_ports), value) != std::end(activated_ports); - }; + reaction(in) {= for (size_t i = 0; i < in.size(); i++) { - if (in[i].is_present() && contained(i)) { + if (in[i].is_present()) { if (*in[i].get() != i) { std::cerr << "ERROR: Expected " << i << '\n'; exit(1); From b019a3cb6109a05f9bcb0657e38dd236ca770459 Mon Sep 17 00:00:00 2001 From: revol-xut Date: Fri, 9 Sep 2022 13:35:51 +0200 Subject: [PATCH 12/23] updated cpp submodule --- org.lflang/src/lib/cpp/reactor-cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/org.lflang/src/lib/cpp/reactor-cpp b/org.lflang/src/lib/cpp/reactor-cpp index 120b79f332..5c7320b030 160000 --- a/org.lflang/src/lib/cpp/reactor-cpp +++ b/org.lflang/src/lib/cpp/reactor-cpp @@ -1 +1 @@ -Subproject commit 120b79f3322120c6e0f4a62726dd2ad9f80efcbe +Subproject commit 5c7320b0309bcef9fb9d30ebc74321348cb50a60 From 0b8d6f7b8d0acee0b247ee8b684328124ef2d39d Mon Sep 17 00:00:00 2001 From: revol-xut Date: Tue, 13 Sep 2022 15:38:24 +0200 Subject: [PATCH 13/23] updated describtions --- lib/scripts/launch.sh | 2 +- test/Cpp/src/multiport/BankSelfBroadcast.lf | 3 +++ .../multiport/{CallbackMultiport.lf => Multiport.lf} | 11 +++++++++-- 3 files changed, 13 insertions(+), 3 deletions(-) rename test/Cpp/src/multiport/{CallbackMultiport.lf => Multiport.lf} (75%) diff --git a/lib/scripts/launch.sh b/lib/scripts/launch.sh index a1a938556e..3208e5de54 100755 --- a/lib/scripts/launch.sh +++ b/lib/scripts/launch.sh @@ -1,4 +1,4 @@ -#!/bin/lfc +#!/bin/bash #============================================================================ # Description: Run the Lingua Franca compiler. diff --git a/test/Cpp/src/multiport/BankSelfBroadcast.lf b/test/Cpp/src/multiport/BankSelfBroadcast.lf index 72312c4edf..a32e3a8eac 100644 --- a/test/Cpp/src/multiport/BankSelfBroadcast.lf +++ b/test/Cpp/src/multiport/BankSelfBroadcast.lf @@ -18,6 +18,9 @@ reactor A(bank_index: size_t(0)) { reaction(in) {= for (size_t i = 0; i < in.size(); i++) { if (in[i].is_present()) { + std::cout << "Reactor " << bank_index << " received " + << *in[i].get() << " on channel " << i << '\n'; + if (*in[i].get() != i) { std::cerr << "ERROR: Expected " << i << '\n'; exit(1); diff --git a/test/Cpp/src/multiport/CallbackMultiport.lf b/test/Cpp/src/multiport/Multiport.lf similarity index 75% rename from test/Cpp/src/multiport/CallbackMultiport.lf rename to test/Cpp/src/multiport/Multiport.lf index 6fb90dc3be..ec4065f3f0 100644 --- a/test/Cpp/src/multiport/CallbackMultiport.lf +++ b/test/Cpp/src/multiport/Multiport.lf @@ -1,4 +1,11 @@ -// Test bank of reactors to multiport input with id parameter in the bank. +// The Multiport tests the get_present_port_indices() function in the reactor::Multiport class. +// This method returnes all present ports this test checks if the returned list of indices +// is correctly generated by the runtime. For that we manually recreate this list and check +// if they are identical. +// +// Author: Tassilo Tanneberger +// + target Cpp; reactor Test { @@ -43,7 +50,7 @@ main reactor CallbackMultiport { for (auto i = 0; i < positions.size(); i++) { if (positions[i] != received_indices[i]) { - std::cout << "mismatching:" << positions[i] << "|" << received_indices[i] << std::endl; + std::cerr << "mismatch detected:" << positions[i] << " and " << received_indices[i] << std::endl; throw std::runtime_error("indices do not match"); } } From 5d1dc6f779afd99ece473854a965925f81f22a91 Mon Sep 17 00:00:00 2001 From: revol-xut Date: Tue, 13 Sep 2022 16:14:44 +0200 Subject: [PATCH 14/23] some minor mistake in main reactor name --- test/Cpp/src/multiport/Multiport.lf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Cpp/src/multiport/Multiport.lf b/test/Cpp/src/multiport/Multiport.lf index ec4065f3f0..71af3861a4 100644 --- a/test/Cpp/src/multiport/Multiport.lf +++ b/test/Cpp/src/multiport/Multiport.lf @@ -20,7 +20,7 @@ reactor Test { =} } -main reactor CallbackMultiport { +main reactor Multiport { test = new Test(); state received:bool(false); From 30a50a4253c1af2eac2fc3485f2d7efd07c3577a Mon Sep 17 00:00:00 2001 From: revol-xut Date: Thu, 15 Sep 2022 10:43:43 +0200 Subject: [PATCH 15/23] submodule changes --- test/Cpp/src/multiport/Multiport.lf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/Cpp/src/multiport/Multiport.lf b/test/Cpp/src/multiport/Multiport.lf index 71af3861a4..6932538d1e 100644 --- a/test/Cpp/src/multiport/Multiport.lf +++ b/test/Cpp/src/multiport/Multiport.lf @@ -1,7 +1,8 @@ // The Multiport tests the get_present_port_indices() function in the reactor::Multiport class. // This method returnes all present ports this test checks if the returned list of indices // is correctly generated by the runtime. For that we manually recreate this list and check -// if they are identical. +// if they are identical. If they are not identical the Multiport and Port Class do not correctly +// exchange information. // // Author: Tassilo Tanneberger // From b9bd5d10d92ff1d3fb2cd90295dc679f23d24e4f Mon Sep 17 00:00:00 2001 From: revol-xut Date: Thu, 15 Sep 2022 11:30:31 +0200 Subject: [PATCH 16/23] reverted submodules --- org.lflang/src/lib/c/reactor-c | 2 +- org.lflang/src/lib/py/reactor-c-py | 2 +- org.lflang/src/lib/ts/reactor-ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/org.lflang/src/lib/c/reactor-c b/org.lflang/src/lib/c/reactor-c index 0a197940fa..dc71953402 160000 --- a/org.lflang/src/lib/c/reactor-c +++ b/org.lflang/src/lib/c/reactor-c @@ -1 +1 @@ -Subproject commit 0a197940fae3194145eae136e1726d6a26c27b57 +Subproject commit dc719534028076c95be64a0fd3145b6541f4a429 diff --git a/org.lflang/src/lib/py/reactor-c-py b/org.lflang/src/lib/py/reactor-c-py index 61433a39c9..3c8843e944 160000 --- a/org.lflang/src/lib/py/reactor-c-py +++ b/org.lflang/src/lib/py/reactor-c-py @@ -1 +1 @@ -Subproject commit 61433a39c98d6cdec3e317ce3692e98abadcc5fc +Subproject commit 3c8843e94477f3972d149f2768985364b716f56b diff --git a/org.lflang/src/lib/ts/reactor-ts b/org.lflang/src/lib/ts/reactor-ts index 811c2413d6..10335d7826 160000 --- a/org.lflang/src/lib/ts/reactor-ts +++ b/org.lflang/src/lib/ts/reactor-ts @@ -1 +1 @@ -Subproject commit 811c2413d6be638b6af2d0e1002972bdeda3ee9f +Subproject commit 10335d7826cc8ad520a1cdddf846c8232cdfabf4 From b5419ef995f920111ba3899f7b5eb9c16c95f693 Mon Sep 17 00:00:00 2001 From: revol-xut Date: Thu, 15 Sep 2022 21:33:21 +0200 Subject: [PATCH 17/23] reverted ts submodule --- org.lflang/src/lib/ts/reactor-ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/org.lflang/src/lib/ts/reactor-ts b/org.lflang/src/lib/ts/reactor-ts index 10335d7826..aeb813a403 160000 --- a/org.lflang/src/lib/ts/reactor-ts +++ b/org.lflang/src/lib/ts/reactor-ts @@ -1 +1 @@ -Subproject commit 10335d7826cc8ad520a1cdddf846c8232cdfabf4 +Subproject commit aeb813a403b42780ba5af63c5afd575954238865 From 5b016459e5801552b2d69eb3421b1262ae4f6d34 Mon Sep 17 00:00:00 2001 From: revol-xut Date: Wed, 21 Sep 2022 13:33:35 +0200 Subject: [PATCH 18/23] formatted tests --- test/Cpp/src/multiport/Multiport.lf | 35 +++++++++++++---------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/test/Cpp/src/multiport/Multiport.lf b/test/Cpp/src/multiport/Multiport.lf index 6932538d1e..b915bf5fcf 100644 --- a/test/Cpp/src/multiport/Multiport.lf +++ b/test/Cpp/src/multiport/Multiport.lf @@ -1,20 +1,18 @@ -// The Multiport tests the get_present_port_indices() function in the reactor::Multiport class. -// This method returnes all present ports this test checks if the returned list of indices -// is correctly generated by the runtime. For that we manually recreate this list and check -// if they are identical. If they are not identical the Multiport and Port Class do not correctly -// exchange information. +// The Multiport tests the get_present_port_indices() function in the +// reactor::Multiport class. This method returnes all present ports this test +// checks if the returned list of indices is correctly generated by the runtime. +// For that we manually recreate this list and check if they are identical. If +// they are not identical the Multiport and Port Class do not correctly exchange +// information. // // Author: Tassilo Tanneberger -// - -target Cpp; +target Cpp reactor Test { - input[3000] sink: void; - output[3000] source: void; + input[3000] sink: void + output[3000] source: void - - reaction (sink) -> source {= + reaction(sink) -> source {= for (auto i: sink.get_present_port_indices()) { source[i].set(); } @@ -22,17 +20,17 @@ reactor Test { } main reactor Multiport { - test = new Test(); - state received:bool(false); + test = new Test() + state received: bool(false) - reaction (startup) -> test.sink {= + reaction(startup) -> test.sink {= for (auto i = 0; i < 30; i++) { auto semi_random_index = (i * 100) % 3000; test.sink[semi_random_index].set(); } =} - reaction (test.source) {= + reaction(test.source) {= received = true; std::vector positions; @@ -44,7 +42,7 @@ main reactor Multiport { auto received_indices = test.source.get_present_port_indices(); if (positions.size() != received_indices.size()) { - std::cerr << "positions size:" << positions.size() + std::cerr << "positions size:" << positions.size() << " indices size:" << received_indices.size() << std::endl; throw std::runtime_error("not matching sizes"); } @@ -59,11 +57,10 @@ main reactor Multiport { std::cout << "[SUCCESS] all indices match" << std::endl; =} - reaction (shutdown) {= + reaction(shutdown) {= if (!received) { std::cerr << "Error: received no input!\n"; exit(2); } =} } - From 9ce3fd6ca733ef6570b672b2950bf242fb7f5965 Mon Sep 17 00:00:00 2001 From: revol-xut Date: Wed, 21 Sep 2022 13:54:21 +0200 Subject: [PATCH 19/23] formatting all tests --- test/Cpp/src/multiport/MultiportFromHierarchy.lf | 3 +-- test/Cpp/src/multiport/MultiportToMultiport2.lf | 7 ++++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/test/Cpp/src/multiport/MultiportFromHierarchy.lf b/test/Cpp/src/multiport/MultiportFromHierarchy.lf index aed02ab890..7fd246667e 100644 --- a/test/Cpp/src/multiport/MultiportFromHierarchy.lf +++ b/test/Cpp/src/multiport/MultiportFromHierarchy.lf @@ -22,12 +22,11 @@ reactor Destination { input[4] in: int reaction(in) {= - int sum = 0; for (auto i : in.get_present_port_indices()) { sum += *in[i].get(); } - + std::cout << "Sum of received: " << sum << ".\n"; if (sum != s) { std::cerr << "ERROR: Expected " << s << ".\n"; diff --git a/test/Cpp/src/multiport/MultiportToMultiport2.lf b/test/Cpp/src/multiport/MultiportToMultiport2.lf index 2cf0287bd6..0c294d8076 100644 --- a/test/Cpp/src/multiport/MultiportToMultiport2.lf +++ b/test/Cpp/src/multiport/MultiportToMultiport2.lf @@ -11,9 +11,10 @@ reactor Source(width: size_t(2)) { =} } -reactor Destination(width:size_t(2)) { - input[width] in:size_t; - reaction (in) {= +reactor Destination(width: size_t(2)) { + input[width] in: size_t + + reaction(in) {= for (auto i: in.get_present_port_indices()) { size_t value = *in[i].get(); std::cout << "Received on channel " << i << ": " << value << '\n'; From 390a59124ae7dc3f9a6b720a0f0e6cc38498b3a6 Mon Sep 17 00:00:00 2001 From: revol-xut Date: Wed, 21 Sep 2022 17:47:39 +0200 Subject: [PATCH 20/23] update formatting --- test/Cpp/src/multiport/BankToBankMultiport.lf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Cpp/src/multiport/BankToBankMultiport.lf b/test/Cpp/src/multiport/BankToBankMultiport.lf index 70f39dba0a..71b90ac648 100644 --- a/test/Cpp/src/multiport/BankToBankMultiport.lf +++ b/test/Cpp/src/multiport/BankToBankMultiport.lf @@ -22,7 +22,7 @@ reactor Destination(width: size_t(1)) { reaction(in) {= int sum = 0; - + for (auto i : in.get_present_port_indices()) { sum += *in[i].get(); } From f899d7cb4e29cf7635bf795cab6770b62986fc5c Mon Sep 17 00:00:00 2001 From: revol-xut Date: Wed, 5 Oct 2022 22:11:09 +0200 Subject: [PATCH 21/23] removing get_active_ports method --- org.lflang/src/org/lflang/generator/cpp/CppPortGenerator.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/org.lflang/src/org/lflang/generator/cpp/CppPortGenerator.kt b/org.lflang/src/org/lflang/generator/cpp/CppPortGenerator.kt index 07c1b7bb24..824c86d2a9 100644 --- a/org.lflang/src/org/lflang/generator/cpp/CppPortGenerator.kt +++ b/org.lflang/src/org/lflang/generator/cpp/CppPortGenerator.kt @@ -66,7 +66,7 @@ class CppPortGenerator(private val reactor: Reactor) { ${name}.reserve($width); for (size_t __lf_idx = 0; __lf_idx < $width; __lf_idx++) { std::string __lf_port_name = "${name}_" + std::to_string(__lf_idx); - ${name}.emplace_back(__lf_port_name, this, ${name}.get_active_ports(), __lf_idx); + ${name}.emplace_back(__lf_port_name, this, &${name}, __lf_idx); } """.trimIndent() } From 47202152f605d6589fb051cff7e38c90a8ebe689 Mon Sep 17 00:00:00 2001 From: revol-xut Date: Wed, 5 Oct 2022 22:44:13 +0200 Subject: [PATCH 22/23] type cast to BaseMultiport --- org.lflang/src/org/lflang/generator/cpp/CppPortGenerator.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/org.lflang/src/org/lflang/generator/cpp/CppPortGenerator.kt b/org.lflang/src/org/lflang/generator/cpp/CppPortGenerator.kt index 824c86d2a9..a377f4b9f0 100644 --- a/org.lflang/src/org/lflang/generator/cpp/CppPortGenerator.kt +++ b/org.lflang/src/org/lflang/generator/cpp/CppPortGenerator.kt @@ -66,7 +66,7 @@ class CppPortGenerator(private val reactor: Reactor) { ${name}.reserve($width); for (size_t __lf_idx = 0; __lf_idx < $width; __lf_idx++) { std::string __lf_port_name = "${name}_" + std::to_string(__lf_idx); - ${name}.emplace_back(__lf_port_name, this, &${name}, __lf_idx); + ${name}.emplace_back(__lf_port_name, this, (reactor::BaseMultiport*)&${name}, __lf_idx); } """.trimIndent() } From 9e300a18d8b1fb13a4965e18ff2a368a84cfb1b3 Mon Sep 17 00:00:00 2001 From: revol-xut Date: Thu, 6 Oct 2022 14:10:51 +0200 Subject: [PATCH 23/23] updated reactor-cpp --- org.lflang/src/lib/cpp/reactor-cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/org.lflang/src/lib/cpp/reactor-cpp b/org.lflang/src/lib/cpp/reactor-cpp index 5c7320b030..8e04e2a15e 160000 --- a/org.lflang/src/lib/cpp/reactor-cpp +++ b/org.lflang/src/lib/cpp/reactor-cpp @@ -1 +1 @@ -Subproject commit 5c7320b0309bcef9fb9d30ebc74321348cb50a60 +Subproject commit 8e04e2a15e94343d005270a9c5dfa5007797336e