Rosetta
Public Types | Public Member Functions | Protected Types | Protected Member Functions | Private Member Functions | Private Attributes | List of all members
utility::signals::SignalHub< ReturnType, Signal > Class Template Reference

forward declaration for SignalHub More...

#include <SignalHub.hh>

Inheritance diagram for utility::signals::SignalHub< ReturnType, Signal >:
Inheritance graph
[legend]

Public Types

typedef platform::Size Size
 

Public Member Functions

 SignalHub ()
 default constructor More...
 
virtual ~SignalHub ()
 default destructor More...
 
void operator() (Signal s)
 send signal to all observers connected to the hub More...
 
Size size () const
 number of connections to the hub More...
 
void block ()
 block signals from being sent More...
 
virtual void unblock ()
 allow signals to be sent More...
 
bool blocked () const
 are signals blocked? More...
 
void clear ()
 clear all connections More...
 
template<typename MemFn , typename Ptr >
Link connect (MemFn fn, Ptr ptr)
 connect an observer's member function to this hub More...
 
template<typename MemFn , typename Ptr >
bool disconnect (MemFn fn, Ptr ptr)
 disconnect an observer's member function from this hub More...
 
Size receive_linkunits_from (SignalHub const &src)
 transfer linkunits from source to this SignalHub More...
 
Links current_links () const
 return a copy of the list of links currently being managed by this SignalHub More...
 

Protected Types

typedef boost::function1< ReturnType, Signal > Function
 
typedef std::vector< LinkUnitOPLinkUnits
 
typedef std::vector< LinkLinks
 

Protected Member Functions

virtual bool signal_allowed (Signal const)
 is signal allowed to be passed? More...
 
virtual void send_signal (Signal s)
 send signal to all observers More...
 
virtual void after_send ()
 initiate an action after send (no-op in SignalHub) More...
 
template<typename MemFn , typename Ptr >
Link connect (MemFn fn, Ptr ptr, LinkUnits &links) const
 connect an observer's member function to the given LinkUnits More...
 
template<typename MemFn , typename Ptr >
bool disconnect (MemFn fn, Ptr ptr, LinkUnits &links) const
 disconnect an observer's member function from the given LinkUnits More...
 
template<typename Functor >
LinkUnits::iterator find_connection (Functor f, LinkUnits &links) const
 find a specific connection to this hub More...
 
void send (Signal s, LinkUnits &links) const
 send signal to all links taking into account validity and local blocking More...
 
void invalidate_all (LinkUnits &links) const
 invalidate and destroy internals of all links More...
 
void remove_invalid (LinkUnits &links) const
 remove and destroy internals of invalid links More...
 
void deallocate (LinkUnit &lu) const
 deallocate function stored in a LinkUnit More...
 
LinkUnitslinkunits ()
 returns the list of LinkUnits More...
 

Private Member Functions

 SignalHub (SignalHub const &rval)
 disallow copy constructor More...
 
SignalHuboperator= (SignalHub const &rval)
 disallow copy assignment More...
 

Private Attributes

LinkUnits links_
 links specifying connections to observers More...
 
bool blocked_
 flag blocking signals from being sent More...
 
bool currently_sending_
 flag indicating SignalHub is currently in the process of sending signals; e.g. true will prevent remove_invalid() from causing any reallocation of the links_ list by erasing elements More...
 

Detailed Description

template<typename ReturnType, typename Signal>
class utility::signals::SignalHub< ReturnType, Signal >

forward declaration for SignalHub

primary class for function based implementation of observer pattern

This class is meant for use in implementations of the observer pattern that pass a single Signal object from the subject to its observers. An observer connects by binding one of its member functions to the SignalHub. The member function must be a unary function taking the desired Signal as its argument. Binding functions that pass references and const Signals will be interpreted correctly even if only 'Signal' is given as the template type. For example, when using a SignalHub< void, Signal > it's possible to bind the following:

However, using something like Signal & or Signal const as the template type will enforce references and/or const-ness.

Warning
SignalHub objects are not copyable.

Member Typedef Documentation

◆ Function

template<typename ReturnType , typename Signal >
typedef boost::function1< ReturnType, Signal > utility::signals::SignalHub< ReturnType, Signal >::Function
protected

◆ Links

template<typename ReturnType , typename Signal >
typedef std::vector< Link > utility::signals::SignalHub< ReturnType, Signal >::Links
protected

◆ LinkUnits

template<typename ReturnType , typename Signal >
typedef std::vector< LinkUnitOP > utility::signals::SignalHub< ReturnType, Signal >::LinkUnits
protected

◆ Size

template<typename ReturnType , typename Signal >
typedef platform::Size utility::signals::SignalHub< ReturnType, Signal >::Size

Constructor & Destructor Documentation

◆ SignalHub() [1/2]

template<typename ReturnType , typename Signal >
utility::signals::SignalHub< ReturnType, Signal >::SignalHub ( )
inline

default constructor

◆ ~SignalHub()

template<typename ReturnType , typename Signal >
virtual utility::signals::SignalHub< ReturnType, Signal >::~SignalHub ( )
inlinevirtual

◆ SignalHub() [2/2]

template<typename ReturnType , typename Signal >
utility::signals::SignalHub< ReturnType, Signal >::SignalHub ( SignalHub< ReturnType, Signal > const &  rval)
private

disallow copy constructor

Member Function Documentation

◆ after_send()

template<typename ReturnType , typename Signal >
virtual void utility::signals::SignalHub< ReturnType, Signal >::after_send ( )
inlineprotectedvirtual

initiate an action after send (no-op in SignalHub)

Returns
true
Remarks
override this function to get custom behavior after signal has been sent to all observers

Reimplemented in utility::signals::PausableSignalHub< ReturnType, Signal >.

Referenced by utility::signals::SignalHub< ReturnType, Signal >::operator()().

◆ block()

template<typename ReturnType , typename Signal >
void utility::signals::SignalHub< ReturnType, Signal >::block ( )
inline

◆ blocked()

template<typename ReturnType , typename Signal >
bool utility::signals::SignalHub< ReturnType, Signal >::blocked ( ) const
inline

◆ clear()

template<typename ReturnType , typename Signal >
void utility::signals::SignalHub< ReturnType, Signal >::clear ( )
inline

◆ connect() [1/2]

template<typename ReturnType , typename Signal >
template<typename MemFn , typename Ptr >
Link utility::signals::SignalHub< ReturnType, Signal >::connect ( MemFn  fn,
Ptr  ptr 
)
inline

connect an observer's member function to this hub

Template Parameters
MemFnunary member function
Parameters
fnpointer to observer's member function
ptrpointer to observer object
Returns
Link that can manage the connection

References kmeans_adaptive_kernel_density_bb_dependent_rotlib::fn, utility::signals::SignalHub< ReturnType, Signal >::links_, and ptr().

Referenced by job_manager.AppWindow::__init__(), PyMOL-Rosetta-relay-client.SecretInputDialog::__init__(), job_manager.CommandRunner::__init__(), and utility::signals::TokenHub< ReturnType, Signal >::connect_tokenize().

◆ connect() [2/2]

template<typename ReturnType , typename Signal >
template<typename MemFn , typename Ptr >
Link utility::signals::SignalHub< ReturnType, Signal >::connect ( MemFn  fn,
Ptr  ptr,
LinkUnits links 
) const
inlineprotected

connect an observer's member function to the given LinkUnits

Template Parameters
MemFnunary member function
Parameters
fnpointer to observer's member function
ptrpointer to observer object
linksfunction object gets added to this set of LinkUnits
Returns
Link that can manage the connection

References utility::signals::SignalHub< ReturnType, Signal >::find_connection(), kmeans_adaptive_kernel_density_bb_dependent_rotlib::fn, create_a3b_hbs::i, ptr(), and utility::signals::SignalHub< ReturnType, Signal >::remove_invalid().

Referenced by job_manager.AppWindow::__init__(), PyMOL-Rosetta-relay-client.SecretInputDialog::__init__(), and job_manager.CommandRunner::__init__().

◆ current_links()

template<typename ReturnType , typename Signal >
Links utility::signals::SignalHub< ReturnType, Signal >::current_links ( ) const
inline

return a copy of the list of links currently being managed by this SignalHub

References extract_by_sidechain_sasa_score::l, and utility::signals::SignalHub< ReturnType, Signal >::links_.

◆ deallocate()

template<typename ReturnType , typename Signal >
void utility::signals::SignalHub< ReturnType, Signal >::deallocate ( LinkUnit lu) const
inlineprotected

◆ disconnect() [1/2]

template<typename ReturnType , typename Signal >
template<typename MemFn , typename Ptr >
bool utility::signals::SignalHub< ReturnType, Signal >::disconnect ( MemFn  fn,
Ptr  ptr 
)
inline

disconnect an observer's member function from this hub

Template Parameters
MemFnunary member function
Parameters
fnpointer to observer's member function
ptrpointer to observer object
Returns
true if disconnect successful, false if connection does not exist

References kmeans_adaptive_kernel_density_bb_dependent_rotlib::fn, utility::signals::SignalHub< ReturnType, Signal >::links_, and ptr().

Referenced by utility::signals::TokenHub< ReturnType, Signal >::disconnect().

◆ disconnect() [2/2]

template<typename ReturnType , typename Signal >
template<typename MemFn , typename Ptr >
bool utility::signals::SignalHub< ReturnType, Signal >::disconnect ( MemFn  fn,
Ptr  ptr,
LinkUnits links 
) const
inlineprotected

disconnect an observer's member function from the given LinkUnits

Template Parameters
MemFnunary member function
Parameters
fnpointer to observer's member function
ptrpointer to observer object
linksfunction object gets removed from this set of LinkUnits
Returns
true if disconnect successful, false if connection does not exist

References utility::signals::SignalHub< ReturnType, Signal >::deallocate(), utility::signals::SignalHub< ReturnType, Signal >::find_connection(), kmeans_adaptive_kernel_density_bb_dependent_rotlib::fn, create_a3b_hbs::i, ptr(), and utility::signals::SignalHub< ReturnType, Signal >::remove_invalid().

◆ find_connection()

template<typename ReturnType , typename Signal >
template<typename Functor >
LinkUnits::iterator utility::signals::SignalHub< ReturnType, Signal >::find_connection ( Functor  f,
LinkUnits links 
) const
inlineprotected

find a specific connection to this hub

Template Parameters
Functorunary functor storable in Function wrapper and equality comparable with Function wrapper, typically result of boost::bind()
Returns
iterator if found, otherwise links.end()

References create_a3b_hbs::f, and create_a3b_hbs::i.

Referenced by utility::signals::SignalHub< ReturnType, Signal >::connect(), and utility::signals::SignalHub< ReturnType, Signal >::disconnect().

◆ invalidate_all()

template<typename ReturnType , typename Signal >
void utility::signals::SignalHub< ReturnType, Signal >::invalidate_all ( LinkUnits links) const
inlineprotected

◆ linkunits()

template<typename ReturnType , typename Signal >
LinkUnits& utility::signals::SignalHub< ReturnType, Signal >::linkunits ( )
inlineprotected

◆ operator()()

template<typename ReturnType , typename Signal >
void utility::signals::SignalHub< ReturnType, Signal >::operator() ( Signal  s)
inline

◆ operator=()

template<typename ReturnType , typename Signal >
SignalHub& utility::signals::SignalHub< ReturnType, Signal >::operator= ( SignalHub< ReturnType, Signal > const &  rval)
private

disallow copy assignment

◆ receive_linkunits_from()

template<typename ReturnType , typename Signal >
Size utility::signals::SignalHub< ReturnType, Signal >::receive_linkunits_from ( SignalHub< ReturnType, Signal > const &  src)
inline

transfer linkunits from source to this SignalHub

Parameters
srcThe source SignalHub to use.
Returns
the number of links transferred
Warning
When using this function, make sure any observers not using Link connection management become aware of any changes in subject.

References utility::signals::SignalHub< ReturnType, Signal >::links_, utility::signals::SignalHub< ReturnType, Signal >::remove_invalid(), and utility::signals::SignalHub< ReturnType, Signal >::size().

◆ remove_invalid()

template<typename ReturnType , typename Signal >
void utility::signals::SignalHub< ReturnType, Signal >::remove_invalid ( LinkUnits links) const
inlineprotected

◆ send()

template<typename ReturnType , typename Signal >
void utility::signals::SignalHub< ReturnType, Signal >::send ( Signal  s,
LinkUnits links 
) const
inlineprotected

◆ send_signal()

template<typename ReturnType , typename Signal >
virtual void utility::signals::SignalHub< ReturnType, Signal >::send_signal ( Signal  s)
inlineprotectedvirtual

◆ signal_allowed()

template<typename ReturnType , typename Signal >
virtual bool utility::signals::SignalHub< ReturnType, Signal >::signal_allowed ( Signal const  )
inlineprotectedvirtual

is signal allowed to be passed?

Returns
true if hub is not blocked, otherwise false
Remarks
override this function to get custom signal passing behavior, such as filtering or buffering

Reimplemented in utility::signals::BufferedSignalHub< ReturnType, Signal >.

References utility::signals::SignalHub< ReturnType, Signal >::blocked_.

Referenced by utility::signals::SignalHub< ReturnType, Signal >::operator()().

◆ size()

template<typename ReturnType , typename Signal >
Size utility::signals::SignalHub< ReturnType, Signal >::size ( ) const
inline

◆ unblock()

template<typename ReturnType , typename Signal >
virtual void utility::signals::SignalHub< ReturnType, Signal >::unblock ( )
inlinevirtual

allow signals to be sent

Remarks
override this to allow for custom behavior upon unblocking, such as buffer release

Reimplemented in utility::signals::BufferedSignalHub< ReturnType, Signal >.

References utility::signals::SignalHub< ReturnType, Signal >::blocked_.

Referenced by utility::signals::BufferedSignalHub< ReturnType, Signal >::unblock().

Member Data Documentation

◆ blocked_

template<typename ReturnType , typename Signal >
bool utility::signals::SignalHub< ReturnType, Signal >::blocked_
private

◆ currently_sending_

template<typename ReturnType , typename Signal >
bool utility::signals::SignalHub< ReturnType, Signal >::currently_sending_
mutableprivate

flag indicating SignalHub is currently in the process of sending signals; e.g. true will prevent remove_invalid() from causing any reallocation of the links_ list by erasing elements

Referenced by utility::signals::SignalHub< ReturnType, Signal >::remove_invalid(), and utility::signals::SignalHub< ReturnType, Signal >::send().

◆ links_

template<typename ReturnType , typename Signal >
LinkUnits utility::signals::SignalHub< ReturnType, Signal >::links_
mutableprivate

The documentation for this class was generated from the following files: