From ee50ed08c2e72b90115468368a8ee3fb061ce486 Mon Sep 17 00:00:00 2001 From: Francisco Paisana Date: Tue, 14 Apr 2020 13:21:35 +0100 Subject: [PATCH] allow inplace task to be called in const contexts --- lib/include/srslte/common/inplace_task.h | 6 +++--- lib/test/common/queue_test.cc | 7 +++++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/include/srslte/common/inplace_task.h b/lib/include/srslte/common/inplace_task.h index f0d0ec215..d7bf563dc 100644 --- a/lib/include/srslte/common/inplace_task.h +++ b/lib/include/srslte/common/inplace_task.h @@ -155,7 +155,7 @@ public: return *this; } - R operator()(Args&&... args) { return oper_ptr->call(&buffer, std::forward(args)...); } + R operator()(Args&&... args) const { return oper_ptr->call(&buffer, std::forward(args)...); } bool is_empty() const { return oper_ptr == oper_table_t::get_empty(); } bool is_in_small_buffer() const { return oper_ptr->is_in_buffer; } @@ -188,8 +188,8 @@ public: private: union { - storage_t buffer; - void* ptr; + mutable storage_t buffer; + void* ptr; }; const oper_table_t* oper_ptr; }; diff --git a/lib/test/common/queue_test.cc b/lib/test/common/queue_test.cc index 25000fe5a..5f0f562a8 100644 --- a/lib/test/common/queue_test.cc +++ b/lib/test/common/queue_test.cc @@ -390,6 +390,13 @@ int test_inplace_task() t2(); TESTASSERT(v == 5); + // TEST: task works in const contexts + t = l2; + auto l3 = [](const srslte::inplace_task& task) { task(); }; + v = 0; + l3(t); + TESTASSERT(v == 6); + std::cout << "outcome: Success\n"; std::cout << "========================================\n"; return 0;