SET(CMAKE_C_FLAGS_DEBUG "-O0 -g")
SET(CMAKE_C_FLAGS_RELEASE "-O2")
-SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_C_FLAGS} -fPIC -std=c++17")
+SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_C_FLAGS} -fPIC -std=c++23")
SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -g")
SET(CMAKE_CXX_FLAGS_RELEASE "-O2")
ChannelObject() : id_(0) {}
ChannelObject(int id, T data) : id_(id), data_(data) {}
+ ChannelObject(const ChannelObject&) = delete;
+ ChannelObject& operator = (const ChannelObject&) = delete;
+ ChannelObject(ChannelObject&&) noexcept = default;
+ ChannelObject& operator = (ChannelObject&&) noexcept = default;
+
void SetId(int id) {
id_ = id;
}
void Push(T item) {
std::lock_guard<std::mutex> lock(mutex_);
- queue_.push(item);
+ queue_.push(std::move(item));
cond_var_.notify_one();
}
static_cast<tizen_core::channel::Receiver<void*>*>(receiver);
auto channel_source = task->AddChannel<void*>(
channel_receiver->shared_from_this(),
- [=](const tizen_core::channel::ChannelObject<void*>& object) {
- callback(
- &const_cast<tizen_core::channel::ChannelObject<void*>&>(object),
- user_data);
+ [callback, user_data](auto object) {
+ callback(&object, user_data);
});
if (channel_source == nullptr) {
_E("Failed to add channel"); // LCOV_EXCL_LINE
static_cast<tizen_core::channel::Sender<void*>*>(sender);
auto* channel_object =
static_cast<tizen_core::channel::ChannelObject<void*>*>(object);
- channel_sender->Send(*channel_object);
+
+ channel_sender->Send(std::move(*channel_object));
return TIZEN_CORE_ERROR_NONE;
}
static_cast<tizen_core::channel::Receiver<void*>*>(receiver);
auto channel_object = channel_receiver->Receive();
*object = static_cast<tizen_core_channel_object_h>(
- new tizen_core::channel::ChannelObject<void*>(channel_object));
+ new tizen_core::channel::ChannelObject<void*>(std::move(channel_object)));
if (*object == nullptr) {
_E("Out of memory");
return TIZEN_CORE_ERROR_OUT_OF_MEMORY;
public:
ChannelSource(std::shared_ptr<Task> task,
std::shared_ptr<channel::Receiver<T>> receiver,
- std::function<void(const channel::ChannelObject<T>&)> cb)
+ std::move_only_function<void(channel::ChannelObject<T>)> cb)
: task_(std::move(task)),
receiver_(std::move(receiver)),
cb_(std::move(cb)),
private:
std::shared_ptr<Task> task_;
std::shared_ptr<channel::Receiver<T>> receiver_;
- std::function<void(const channel::ChannelObject<T>&)> cb_;
+ std::move_only_function<void(channel::ChannelObject<T>)> cb_;
std::shared_ptr<PollFd> poll_fd_;
};
template <typename T>
std::shared_ptr<ISource> Task::AddChannel(
std::shared_ptr<channel::Receiver<T>> receiver,
- std::function<void(const channel::ChannelObject<T>&)> cb) {
+ std::move_only_function<void(channel::ChannelObject<T>)> cb) {
auto source = std::make_shared<ChannelSource<T>>(
shared_from_this(), std::move(receiver), std::move(cb));
AddSource(source);
template std::shared_ptr<ISource> Task::AddChannel<void*>(
std::shared_ptr<channel::Receiver<void*>> receiver,
- std::function<void(const channel::ChannelObject<void*>&)> cb);
+ std::move_only_function<void(channel::ChannelObject<void*>)> cb);
template std::shared_ptr<ISource> Task::AddEvent<void*>(
std::shared_ptr<event::EventBroker<void*>> broker);
template void Task::EmitEvent<void*>(
template <typename T>
std::shared_ptr<ISource> AddChannel(
std::shared_ptr<channel::Receiver<T>> receiver,
- std::function<void(const channel::ChannelObject<T>&)> cb);
+ std::move_only_function<void(channel::ChannelObject<T>)> cb);
template <typename T>
std::shared_ptr<ISource> AddEvent(
std::shared_ptr<event::EventBroker<T>> broker);
ret = tizen_core_channel_object_get_sender_task_name(object, &task_name);
ASSERT_EQ(ret, TIZEN_CORE_ERROR_NONE);
ASSERT_STREQ(task_name, "sender");
+
+ void* data = nullptr;
+ ret = tizen_core_channel_object_get_data(object, &data);
+ ASSERT_EQ(ret, TIZEN_CORE_ERROR_NONE);
+ ASSERT_STREQ(static_cast<const char*>(data), "test");
+
tizen_core_channel_object_destroy(object);
}