From 39a59350678e11adc52973245bef220510a9d6e3 Mon Sep 17 00:00:00 2001 From: Tristan Schnell Date: Mon, 8 Apr 2019 15:08:10 +0200 Subject: [PATCH] added package_header templating for the pipeline class and the abstract producer and consumer classes --- include/ur_rtde_driver/comm/pipeline.h | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/include/ur_rtde_driver/comm/pipeline.h b/include/ur_rtde_driver/comm/pipeline.h index b32145f..0a55c95 100644 --- a/include/ur_rtde_driver/comm/pipeline.h +++ b/include/ur_rtde_driver/comm/pipeline.h @@ -1,4 +1,6 @@ /* + * Copyright 2019, FZI Forschungszentrum Informatik (templating) + * * Copyright 2017, 2018 Simon Rasmussen (refactor) * * Copyright 2015, 2016 Thomas Timm Andersen (original version) @@ -24,6 +26,7 @@ #include #include "ur_rtde_driver/log.h" #include "ur_rtde_driver/queue/readerwriterqueue.h" +#include "ur_rtde_driver/comm/package.h" namespace ur_driver { @@ -104,7 +107,7 @@ public: } }; -template +template class IProducer { public: @@ -118,7 +121,7 @@ public: { } - virtual bool tryGet(std::vector>& products) = 0; + virtual bool tryGet(std::vector>>& products) = 0; }; class INotifier @@ -132,24 +135,25 @@ public: } }; -template +template class Pipeline { private: typedef std::chrono::high_resolution_clock Clock; typedef Clock::time_point Time; - IProducer& producer_; - IConsumer& consumer_; + using _package_type = URPackage; + IProducer& producer_; + IConsumer<_package_type>& consumer_; std::string name_; INotifier& notifier_; - BlockingReaderWriterQueue> queue_; + BlockingReaderWriterQueue> queue_; std::atomic running_; std::thread pThread_, cThread_; void run_producer() { producer_.setupProducer(); - std::vector> products; + std::vector> products; while (running_) { if (!producer_.tryGet(products)) @@ -177,7 +181,7 @@ private: void run_consumer() { consumer_.setupConsumer(); - std::unique_ptr product; + std::unique_ptr<_package_type> product; while (running_) { // timeout was chosen because we should receive messages @@ -201,7 +205,7 @@ private: } public: - Pipeline(IProducer& producer, IConsumer& consumer, std::string name, INotifier& notifier) + Pipeline(IProducer& producer, IConsumer<_package_type>& consumer, std::string name, INotifier& notifier) : producer_(producer), consumer_(consumer), name_(name), notifier_(notifier), queue_{ 32 }, running_{ false } { }