base::Event< EVENT > Class Template Reference

Broadcasts events to registered listener functors. More...

#include <base_event.hh>

Inheritance diagram for base::Event< EVENT >:

base::Threadable

List of all members.

Public Member Functions

 Event (void)
 ~Event ()
void Listen (SharedPtr< ListenerFunctor > listener)
 Register a listener.
void Unlisten (SharedPtr< ListenerFunctor > listener)
 Unregister a listener.
void Broadcast (EVENT event)

Private Types

typedef FastLock Lock
typedef std::list
< SharedPtr
< ListenerFunctor > > 
Listeners

Private Attributes

Listeners mListeners
LockmInstanceLock

Classes

class  ListenerFunctor
 Listener functor called when event is broadcast. More...


Detailed Description

template<typename EVENT = Void>
class base::Event< EVENT >

Broadcasts events to registered listener functors.

///
/// Overview:
/// ---------
/// This class provides a registry for listener functors.
/// Broadcast() calls every listener.
///
/// The purpose is similar to the Chain of Responsibility design pattern,
/// but listeners are not aware of a chain nor each other.
///
/// Usage and examples:
/// -------------------
/// In general, broadcasting should be done at the very beginning
/// or very end of a function to avoid inconsistent state.
/// Event objects are optional and are passed by value to listeners.
///
/// Event<>			mEventReady;
/// Event<Message>	mEventMessage;
///
/// class ReadyListener : public Event<>::ListenerFunctor
/// {
///     void operator()( Void nothing );  // Void class substitutes for intrinsic void
/// };
///
/// class MessageListener : public Event<Message>::ListenerFunctor
/// {
///     void operator()( Message msg );
/// };
///
/// mEvent.Listen( new ReadyListener );  // construct and pass functor to Listen()
/// mEvent.Listen( new MessageListener );
///
/// mEvent.Broadcast( Void() );  // template restriction: simply "Broadcast()" won't compile
///
/// 

Member Typedef Documentation

template<typename EVENT = Void>
typedef FastLock base::Event< EVENT >::Lock [private]

template<typename EVENT = Void>
typedef std::list< SharedPtr<ListenerFunctor> > base::Event< EVENT >::Listeners [private]


Constructor & Destructor Documentation

template<typename EVENT = Void>
base::Event< EVENT >::Event ( void   )  [inline]

template<typename EVENT = Void>
base::Event< EVENT >::~Event (  )  [inline]


Member Function Documentation

template<typename EVENT = Void>
void base::Event< EVENT >::Listen ( SharedPtr< ListenerFunctor listener  )  [inline]

Register a listener.

template<typename EVENT = Void>
void base::Event< EVENT >::Unlisten ( SharedPtr< ListenerFunctor listener  )  [inline]

Unregister a listener.

template<typename EVENT = Void>
void base::Event< EVENT >::Broadcast ( EVENT  event  )  [inline]

Broadcast an object to all listeners. If no arg exists, call as Broadcast( Void() ).


Member Data Documentation

template<typename EVENT = Void>
Listeners base::Event< EVENT >::mListeners [private]

template<typename EVENT = Void>
Lock* base::Event< EVENT >::mInstanceLock [mutable, private]


The documentation for this class was generated from the following file: Palomino 3D Engine documents generated by doxygen 1.5.3 on Fri Nov 23 11:26:19 2007