Molybden API
Loading...
Searching...
No Matches
delegate.hpp
1// Copyright (c) 2000-2024 TeamDev. All rights reserved.
2// TeamDev PROPRIETARY and CONFIDENTIAL.
3// Use is subject to license terms.
4
5#ifndef MOLYBDEN_DELEGATE_HPP
6#define MOLYBDEN_DELEGATE_HPP
7
8#include <functional>
9#include <memory>
10#include <mutex>
11
12namespace molybden {
13
29template <typename Args, typename Action>
30class Delegate {
31 public:
32
36 using Signature = void(const Args& args, Action action);
37
54 Delegate& operator=(std::function<Signature> callback);
55
59 void reset();
60
61 private:
62 std::recursive_mutex callback_mutex_;
63 std::function<Signature> callback_;
64
65 void operator()(const Args& args, Action action);
66
67 friend class ObservableOwner;
68};
69
70template <typename Args, typename Action>
72 std::function<Signature> callback) {
73 std::lock_guard guard(callback_mutex_);
74 callback_ = callback;
75 return *this;
76}
77
78template <typename Args, typename Action>
79void Delegate<Args, Action>::operator()(const Args& args, Action action) {
80 std::lock_guard guard(callback_mutex_);
81 if (callback_) {
82 callback_(args, std::move(action));
83 }
84}
85
86template <typename Args, typename Action>
88 std::lock_guard guard(callback_mutex_);
89 callback_ = nullptr;
90}
91
92} // namespace molybden
93
94#endif // MOLYBDEN_DELEGATE_HPP
The base API that implements classes which represent delegate's action.
Definition delegate_action.hpp:18
Delegates allow you to make decisions that affect the application behavior.
Definition delegate.hpp:30
void reset()
Resets the callback registered for this delegate.
Definition delegate.hpp:87
Delegate & operator=(std::function< Signature > callback)
Registers a callback to be invoked by this delegate.
Definition delegate.hpp:71
void(const Args &args, Action action) Signature
The callback's signature.
Definition delegate.hpp:36