48 return owned_by_ ==
nullptr;
73 if( iteration_count_ == 0 )
80 return iteration_count_ != 0;
86 assert( !is_iterating() );
87 observers_.push_back( observer );
122 LINK::LINK( std::shared_ptr<DETAIL::OBSERVABLE_BASE::IMPL> token,
void* observer )
131 other.token_.reset();
137 token_ = std::move( other.token_ );
138 other.token_.reset();
144 LINK::operator bool()
const
146 return token_ ? true :
false;
187 impl_ = std::make_shared<IMPL>(
this );
194 impl_ = std::make_shared<IMPL>();
215 impl_->add_observer( observer );
222 impl_->remove_observer( observer );
229 impl_->enter_iteration();
237 impl_->leave_iteration();
239 if( !
impl_->is_iterating() && !
impl_->is_shared() &&
impl_.use_count() == 1 )
248 return impl_->observers_.size();
void operator=(const LINK &)=delete
std::shared_ptr< DETAIL::OBSERVABLE_BASE::IMPL > token_
A model subscriber implementation using links to represent connections.
bool is_iterating() const
void remove_observer(void *observer)
void add_observer(void *observer)
std::vector< void * > observers_
OBSERVABLE_BASE * owned_by_
IMPL(OBSERVABLE_BASE *owned_by=nullptr)
unsigned int iteration_count_
void remove_observer(void *observer)
std::shared_ptr< IMPL > get_shared_impl()
void add_observer(void *observer)
void on_observers_empty()
void allocate_shared_impl()
std::shared_ptr< IMPL > impl_
bool operator()(const T &val) const