Signals Library
slot_base.hpp
1 #ifndef SIGNALS_SLOT_BASE_HPP
2 #define SIGNALS_SLOT_BASE_HPP
3 #include <algorithm>
4 #include <iterator>
5 #include <memory>
6 #include <vector>
7 
8 namespace sig {
9 
11 class Slot_base {
12  public:
13  using Locked_container_t = std::vector<std::shared_ptr<void>>;
14  using Tracked_container_t = std::vector<std::weak_ptr<void>>;
15 
16  public:
17  Slot_base() = default;
18  Slot_base(Slot_base const&) = default;
19  Slot_base& operator=(Slot_base const&) = default;
20  Slot_base(Slot_base&&) = default;
21  Slot_base& operator=(Slot_base&&) = default;
22  virtual ~Slot_base() = default;
23 
24  public:
26  auto expired() const -> bool
27  {
28  return std::any_of(
29  std::begin(tracked_ptrs_), std::end(tracked_ptrs_),
30  [](auto const& tracked) { return tracked.expired(); });
31  }
32 
34 
37  auto lock() const -> Locked_container_t
38  {
39  auto locked_vec = Locked_container_t{};
40  for (auto& tracked : tracked_ptrs_)
41  locked_vec.push_back(tracked.lock());
42  return locked_vec;
43  }
44 
46  auto get_tracked_container() const -> Tracked_container_t const&
47  {
48  return tracked_ptrs_;
49  }
50 
51  protected:
52  Tracked_container_t tracked_ptrs_;
53 };
54 
55 } // namespace sig
56 #endif // SIGNALS_SLOT_BASE_HPP
sig::Slot_base::expired
auto expired() const -> bool
Definition: slot_base.hpp:26
sig
Definition: connection.hpp:8
sig::Slot_base::lock
auto lock() const -> Locked_container_t
Locks the tracked objects so they cannot be destroyed.
Definition: slot_base.hpp:37
sig::Slot_base
Base class for Slot, handles tracked objects.
Definition: slot_base.hpp:11
sig::Slot_base::get_tracked_container
auto get_tracked_container() const -> Tracked_container_t const &
Definition: slot_base.hpp:46