From 543d19d0328b75244f99b7893214091e7a173ebe Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Fri, 15 Oct 2021 08:26:35 +0200 Subject: [PATCH 1/2] Replace Sink::read() with Sink::operator T() to equalise interfaces between Shared and Sink/Source. --- .../Threading/Demo_Source_Sink_Counter/Consumer.inot | 2 +- .../Threading/Demo_Source_Sink_LED/Sink_Thread.inot | 3 +-- src/threading/Sink.hpp | 10 +++++----- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/examples/Threading/Demo_Source_Sink_Counter/Consumer.inot b/examples/Threading/Demo_Source_Sink_Counter/Consumer.inot index d892c67..b5c1fd6 100644 --- a/examples/Threading/Demo_Source_Sink_Counter/Consumer.inot +++ b/examples/Threading/Demo_Source_Sink_Counter/Consumer.inot @@ -7,5 +7,5 @@ void setup() void loop() { - Serial.println(counter.read()); + Serial.println(counter); } diff --git a/examples/Threading/Demo_Source_Sink_LED/Sink_Thread.inot b/examples/Threading/Demo_Source_Sink_LED/Sink_Thread.inot index 51f9031..14a9723 100644 --- a/examples/Threading/Demo_Source_Sink_LED/Sink_Thread.inot +++ b/examples/Threading/Demo_Source_Sink_LED/Sink_Thread.inot @@ -16,6 +16,5 @@ void loop() * this call will surely block until something comes from the connected SOURCE. In this case * the pace is dictated by the SOURCE that sends data every 100 ms. */ - bool led_on = led.read(); - digitalWrite(LED_BUILTIN, led_on); + digitalWrite(LED_BUILTIN, led); } diff --git a/src/threading/Sink.hpp b/src/threading/Sink.hpp index 40179a2..0d9c291 100644 --- a/src/threading/Sink.hpp +++ b/src/threading/Sink.hpp @@ -36,7 +36,7 @@ class SinkBase virtual ~SinkBase() { } - virtual T read() = 0; + virtual operator T() = 0; virtual void inject(T const & value) = 0; }; @@ -48,7 +48,7 @@ class SinkNonBlocking : public SinkBase SinkNonBlocking() { } virtual ~SinkNonBlocking() { } - virtual T read() override; + virtual operator T() override; virtual void inject(T const & value) override; @@ -67,7 +67,7 @@ class SinkBlocking : public SinkBase SinkBlocking(); virtual ~SinkBlocking() { } - virtual T read() override; + virtual operator T() override; virtual void inject(T const & value) override; @@ -86,7 +86,7 @@ class SinkBlocking : public SinkBase **************************************************************************************/ template -T SinkNonBlocking::read() +SinkNonBlocking::operator T() { _mutex.lock(); return _data; @@ -113,7 +113,7 @@ SinkBlocking::SinkBlocking() { } template -T SinkBlocking::read() +SinkBlocking::operator T() { _mutex.lock(); while (!_is_data_available) From e0b3f9fbe7efc0e07c3dd5bdf1c4750c35d4f365 Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Fri, 15 Oct 2021 08:29:44 +0200 Subject: [PATCH 2/2] Replace Source::write() with Source::operator =() to equalise interfaces between Shared and Sink/Source. --- examples/Threading/Demo_Source_Sink_Counter/Producer.inot | 2 +- examples/Threading/Demo_Source_Sink_LED/Source_Thread.inot | 4 ++-- src/threading/Source.hpp | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/examples/Threading/Demo_Source_Sink_Counter/Producer.inot b/examples/Threading/Demo_Source_Sink_Counter/Producer.inot index fe0a250..a038d37 100644 --- a/examples/Threading/Demo_Source_Sink_Counter/Producer.inot +++ b/examples/Threading/Demo_Source_Sink_Counter/Producer.inot @@ -8,6 +8,6 @@ void setup() void loop() { static int i = 0; - counter.write(i); + counter = i; i++; } diff --git a/examples/Threading/Demo_Source_Sink_LED/Source_Thread.inot b/examples/Threading/Demo_Source_Sink_LED/Source_Thread.inot index 1bf7fca..4585f85 100644 --- a/examples/Threading/Demo_Source_Sink_LED/Source_Thread.inot +++ b/examples/Threading/Demo_Source_Sink_LED/Source_Thread.inot @@ -8,8 +8,8 @@ void setup() void loop() { - led.write(true); + led = true; delay(100); - led.write(false); + led = false; delay(100); } diff --git a/src/threading/Source.hpp b/src/threading/Source.hpp index 0a3893c..d75ac8c 100644 --- a/src/threading/Source.hpp +++ b/src/threading/Source.hpp @@ -43,7 +43,7 @@ class Source public: void connectTo(SinkBase & sink); - void write(T const & value); + void operator = (T const & other); private: std::list *> _sink_list; @@ -60,7 +60,7 @@ void Source::connectTo(SinkBase & sink) } template -void Source::write(T const & value) +void Source::operator = (T const & value) { std::for_each(std::begin(_sink_list), std::end (_sink_list),