61 Timer(std::uint64_t period_us,
void (*function)());
74 template <
typename M,
typename T>
75 Timer(std::uint64_t period_us, M method, T& instance);
90 template <
typename M,
typename T>
130 template <
typename T>
132 using reference_counted_object_pointer =
136 using value_type = T;
137 using pointer = value_type*;
138 using const_pointer =
const value_type*;
139 using reference = value_type&;
140 using const_reference =
const value_type&;
143 explicit IntrusivePtr(reference_counted_object_pointer reference_counted_object)
144 : _reference_counted_object{reference_counted_object}
152 ~IntrusivePtr() noexcept
158 IntrusivePtr(
const IntrusivePtr& other) : IntrusivePtr{other._reference_counted_object}
163 IntrusivePtr& operator=(
const IntrusivePtr& other)
166 _reference_counted_object = other._reference_counted_object;
172 IntrusivePtr(IntrusivePtr&& other) noexcept
173 : _reference_counted_object{other._reference_counted_object}
179 IntrusivePtr& operator=(IntrusivePtr&& other)
noexcept
181 _reference_counted_object = other._reference_counted_object;
188 void addReference() const noexcept
190 _reference_counted_object->addReference();
194 void removeReference() const noexcept
196 _reference_counted_object->removeReference();
200 void release() noexcept
202 _reference_counted_object =
nullptr;
205 auto operator->() const noexcept -> const_pointer
207 return &(_reference_counted_object->getObject());
210 auto operator->() noexcept -> pointer
212 return &(_reference_counted_object->getObject());
215 auto operator*() noexcept -> reference
217 return *(this->operator->());
220 auto operator*() const noexcept -> const_reference
222 return *(this->operator->());
226 reference_counted_object_pointer _reference_counted_object;
229 template <
typename T,
typename... Args>
230 static auto makeIntrusive(Args&&... args) -> IntrusivePtr<T>;
233 struct Implementation;
234 IntrusivePtr<Implementation> _impl;