Refactored processor enqueueing

This commit is contained in:
Paul-Louis Ageneau
2020-11-15 17:53:08 +01:00
parent 1181fdc599
commit 91a854aa5b
2 changed files with 26 additions and 27 deletions

View File

@ -102,12 +102,12 @@ private:
std::function<void()> function;
};
template <typename... P> class synchronized_callback {
template <typename... Args> class synchronized_callback {
public:
synchronized_callback() = default;
synchronized_callback(synchronized_callback &&cb) { *this = std::move(cb); }
synchronized_callback(const synchronized_callback &cb) { *this = cb; }
synchronized_callback(std::function<void(P...)> func) { *this = std::move(func); }
synchronized_callback(std::function<void(Args...)> func) { *this = std::move(func); }
~synchronized_callback() { *this = nullptr; }
synchronized_callback &operator=(synchronized_callback &&cb) {
@ -123,16 +123,16 @@ public:
return *this;
}
synchronized_callback &operator=(std::function<void(P...)> func) {
synchronized_callback &operator=(std::function<void(Args...)> func) {
std::lock_guard lock(mutex);
callback = std::move(func);
return *this;
}
void operator()(P... args) const {
void operator()(Args... args) const {
std::lock_guard lock(mutex);
if (callback)
callback(args...);
callback(std::move(args)...);
}
operator bool() const {
@ -140,8 +140,12 @@ public:
return callback ? true : false;
}
std::function<void(Args...)> wrap() const {
return [this](Args... args) { (*this)(std::move(args)...); };
}
private:
std::function<void(P...)> callback;
std::function<void(Args...)> callback;
mutable std::recursive_mutex mutex;
};
} // namespace rtc