OLD | NEW |
---|---|
1 // sigslot.h: Signal/Slot classes | 1 // sigslot.h: Signal/Slot classes |
2 // | 2 // |
3 // Written by Sarah Thompson (sarah@telergy.com) 2002. | 3 // Written by Sarah Thompson (sarah@telergy.com) 2002. |
4 // | 4 // |
5 // License: Public domain. You are free to use this code however you like, with the proviso that | 5 // License: Public domain. You are free to use this code however you like, with the proviso that |
6 // the author takes on no responsibility or liability for any use. | 6 // the author takes on no responsibility or liability for any use. |
7 // | 7 // |
8 // QUICK DOCUMENTATION | 8 // QUICK DOCUMENTATION |
9 // | 9 // |
10 // (see also the full documentation at http://sigsl ot.sourceforge.net/) | 10 // (see also the full documentation at http://sigsl ot.sourceforge.net/) |
(...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
400 | 400 |
401 ~_signal_base() | 401 ~_signal_base() |
402 { | 402 { |
403 disconnect_all(); | 403 disconnect_all(); |
404 } | 404 } |
405 | 405 |
406 private: | 406 private: |
407 _signal_base& operator= (_signal_base const& that); | 407 _signal_base& operator= (_signal_base const& that); |
408 | 408 |
409 public: | 409 public: |
410 » » _signal_base(const _signal_base& s) : _signal_base_interface(&_s ignal_base::do_slot_disconnect, &_signal_base::do_slot_duplicate) { | 410 » » _signal_base(const _signal_base& o) : _signal_base_interface(&_s ignal_base::do_slot_disconnect, &_signal_base::do_slot_duplicate) { |
411 lock_block<mt_policy> lock(this); | 411 lock_block<mt_policy> lock(this); |
412 » » » connections_list::const_iterator it = m_connected_slots. begin(); | 412 for (const auto& connection : o.m_connected_slots) |
413 » » » connections_list::const_iterator itEnd = m_connected_slo ts.end(); | |
414 » » » while(it != itEnd) | |
415 { | 413 { |
416 » » » » it->getdest()->signal_connect(this); | 414 » » » » connection.getdest()->signal_connect(this); |
417 » » » » m_connected_slots.push_back(*it); | 415 » » » » m_connected_slots.push_back(connection); |
418 » » » » ++it; | |
419 } | 416 } |
420 } | 417 } |
421 | 418 |
422 bool is_empty() | 419 bool is_empty() |
423 { | 420 { |
424 lock_block<mt_policy> lock(this); | 421 lock_block<mt_policy> lock(this); |
425 return m_connected_slots.empty(); | 422 return m_connected_slots.empty(); |
426 } | 423 } |
427 | 424 |
428 void disconnect_all() | 425 void disconnect_all() |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
521 { | 518 { |
522 private: | 519 private: |
523 typedef std::set< _signal_base_interface* > sender_set; | 520 typedef std::set< _signal_base_interface* > sender_set; |
524 typedef sender_set::const_iterator const_iterator; | 521 typedef sender_set::const_iterator const_iterator; |
525 | 522 |
526 public: | 523 public: |
527 has_slots() : has_slots_interface(&has_slots::do_signal_connect, &has_slots::do_signal_disconnect, &has_slots::do_disconnect_all) | 524 has_slots() : has_slots_interface(&has_slots::do_signal_connect, &has_slots::do_signal_disconnect, &has_slots::do_disconnect_all) |
528 { | 525 { |
529 } | 526 } |
530 | 527 |
528 has_slots(has_slots const& o) : has_slots_interface(&has_slots:: do_signal_connect, &has_slots::do_signal_disconnect, &has_slots::do_disconnect_a ll) | |
529 { | |
Taylor Brandstetter
2017/04/27 03:08:44
I know indentation is messed up; I'm going to make
| |
530 lock_block<mt_policy> lock(this); | |
531 for (auto* signal : o.m_senders) { | |
532 signal->slot_duplicate(&o, this); | |
533 } | |
534 } | |
535 | |
531 ~has_slots() | 536 ~has_slots() |
532 { | 537 { |
533 this->disconnect_all(); | 538 this->disconnect_all(); |
534 } | 539 } |
535 | 540 |
536 private: | 541 private: |
537 has_slots(has_slots const&); | |
538 has_slots& operator= (has_slots const&); | 542 has_slots& operator= (has_slots const&); |
539 | 543 |
540 static void do_signal_connect(has_slots_interface* p, _signal_ba se_interface* sender) | 544 static void do_signal_connect(has_slots_interface* p, _signal_ba se_interface* sender) |
541 { | 545 { |
542 has_slots* const self = static_cast< has_slots* >(p); | 546 has_slots* const self = static_cast< has_slots* >(p); |
543 lock_block<mt_policy> lock(self); | 547 lock_block<mt_policy> lock(self); |
544 self->m_senders.insert(sender); | 548 self->m_senders.insert(sender); |
545 } | 549 } |
546 | 550 |
547 static void do_signal_disconnect(has_slots_interface* p, _signal _base_interface* sender) | 551 static void do_signal_disconnect(has_slots_interface* p, _signal _base_interface* sender) |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
651 | 655 |
652 template<typename A1, typename A2, typename A3, typename A4, typename A5 , typename A6, typename A7, typename mt_policy = SIGSLOT_DEFAULT_MT_POLICY> | 656 template<typename A1, typename A2, typename A3, typename A4, typename A5 , typename A6, typename A7, typename mt_policy = SIGSLOT_DEFAULT_MT_POLICY> |
653 using signal7 = signal_with_thread_policy<mt_policy, A1, A2, A3, A4, A5, A6, A7>; | 657 using signal7 = signal_with_thread_policy<mt_policy, A1, A2, A3, A4, A5, A6, A7>; |
654 | 658 |
655 template<typename A1, typename A2, typename A3, typename A4, typename A5 , typename A6, typename A7, typename A8, typename mt_policy = SIGSLOT_DEFAULT_MT _POLICY> | 659 template<typename A1, typename A2, typename A3, typename A4, typename A5 , typename A6, typename A7, typename A8, typename mt_policy = SIGSLOT_DEFAULT_MT _POLICY> |
656 using signal8 = signal_with_thread_policy<mt_policy, A1, A2, A3, A4, A5, A6, A7, A8>; | 660 using signal8 = signal_with_thread_policy<mt_policy, A1, A2, A3, A4, A5, A6, A7, A8>; |
657 | 661 |
658 } // namespace sigslot | 662 } // namespace sigslot |
659 | 663 |
660 #endif // WEBRTC_BASE_SIGSLOT_H__ | 664 #endif // WEBRTC_BASE_SIGSLOT_H__ |
OLD | NEW |