17 #ifndef CYBER_BASE_SIGNAL_H_ 18 #define CYBER_BASE_SIGNAL_H_ 30 template <
typename... Args>
33 template <
typename... Args>
36 template <
typename... Args>
50 std::lock_guard<std::mutex> lock(mutex_);
51 for (
auto& slot : slots_) {
52 local.emplace_back(slot);
57 for (
auto& slot : local) {
62 ClearDisconnectedSlots();
66 auto slot = std::make_shared<
Slot<Args...>>(cb);
68 std::lock_guard<std::mutex> lock(mutex_);
69 slots_.emplace_back(slot);
78 std::lock_guard<std::mutex> lock(mutex_);
79 for (
auto& slot : slots_) {
88 ClearDisconnectedSlots();
94 std::lock_guard<std::mutex> lock(mutex_);
95 for (
auto& slot : slots_) {
105 void ClearDisconnectedSlots() {
106 std::lock_guard<std::mutex> lock(mutex_);
108 std::remove_if(slots_.begin(), slots_.end(),
109 [](
const SlotPtr& slot) {
return !slot->connected(); }),
117 template <
typename... Args>
125 : slot_(slot), signal_(signal) {}
132 if (
this != &another) {
133 this->slot_ = another.slot_;
134 this->signal_ = another.signal_;
140 if (slot !=
nullptr && slot_ !=
nullptr) {
141 return slot_.get() == slot.get();
148 return slot_->connected();
154 if (signal_ && slot_) {
155 return signal_->Disconnect(*
this);
165 template <
typename... Args>
170 : cb_(another.cb_), connected_(another.connected_) {}
172 : cb_(cb), connected_(connected) {}
176 if (connected_ && cb_) {
186 bool connected_ =
true;
193 #endif // CYBER_BASE_SIGNAL_H_ Connection()
Definition: signal.h:123
bool IsConnected() const
Definition: signal.h:146
void operator()(Args... args)
Definition: signal.h:175
bool connected() const
Definition: signal.h:182
bool Disconnect()
Definition: signal.h:153
PlanningContext is the runtime context in planning. It is persistent across multiple frames...
Definition: atomic_hash_map.h:25
Slot(const Slot &another)
Definition: signal.h:169
void operator()(Args... args)
Definition: signal.h:47
virtual ~Connection()
Definition: signal.h:126
void Disconnect()
Definition: signal.h:181
virtual ~Slot()
Definition: signal.h:173
Slot(const Callback &cb, bool connected=true)
Definition: signal.h:171
std::function< void(Args...)> Callback
Definition: signal.h:168
std::function< void(Args...)> Callback
Definition: signal.h:39
virtual ~Signal()
Definition: signal.h:45
Signal()
Definition: signal.h:44
ConnectionType Connect(const Callback &cb)
Definition: signal.h:65
bool Disconnect(const ConnectionType &conn)
Definition: signal.h:75
Connection(const SlotPtr &slot, const SignalPtr &signal)
Definition: signal.h:124
std::shared_ptr< Slot< Args... > > SlotPtr
Definition: signal.h:120
Connection & operator=(const Connection &another)
Definition: signal.h:131
bool HasSlot(const SlotPtr &slot) const
Definition: signal.h:139
std::list< SlotPtr > SlotList
Definition: signal.h:41
Connection< Args... > ConnectionType
Definition: signal.h:42
std::shared_ptr< Slot< Args... > > SlotPtr
Definition: signal.h:40
void DisconnectAllSlots()
Definition: signal.h:93