Open Model Railroad Network (OpenMRN)
Loading...
Searching...
No Matches
openlcb::TreeEventHandlers Class Reference

EventRegistry implementation that keeps event handlers in a SortedListMap and filters the event handler calls based on the registered event handler arguments (id/mask). More...

#include <EventHandlerContainer.hxx>

Inheritance diagram for openlcb::TreeEventHandlers:
openlcb::EventRegistry Atomic Singleton< EventRegistry >

Classes

struct  cmpop
 Comparison operator for event registry entries. More...
 
class  Iterator
 Class representing the iteration state on the binary tree-based event handler registry. More...
 

Public Member Functions

EventIteratorcreate_iterator () OVERRIDE
 Creates a new event iterator. Caller takes ownership of object.
 
void register_handler (const EventRegistryEntry &entry, unsigned mask) OVERRIDE
 Adds a new event handler to the registry.
 
void unregister_handler (EventHandler *handler, uint32_t user_arg=0, uint32_t user_arg_mask=0) OVERRIDE
 Removes all registered instances of a given event handler pointer.
 
void reserve (size_t count) OVERRIDE
 Prepares storage for adding many event handlers.
 
- Public Member Functions inherited from openlcb::EventRegistry
unsigned get_epoch ()
 Returns a monotonically increasing number that will change every time the set of registered event handlers change.
 

Private Types

typedef SortedListSet< EventRegistryEntry, cmpopOneMaskMap
 
typedef std::map< uint8_t, OneMaskMapMaskLookupMap
 

Private Attributes

MaskLookupMap handlers_
 The registered handlers.
 

Friends

class Iterator
 

Additional Inherited Members

- Static Public Member Functions inherited from openlcb::EventRegistry
static unsigned align_mask (EventId *event, unsigned size)
 Computes the alignment mask for registering an event range.
 
- Static Public Member Functions inherited from Singleton< EventRegistry >
static EventRegistry * instance ()
 
static bool exists ()
 
- Protected Member Functions inherited from openlcb::EventRegistry
void set_dirty ()
 Implementations must call this function from register and unregister handler to mark iterators being invalidated.
 
- Private Member Functions inherited from Atomic
void lock ()
 
void unlock ()
 

Detailed Description

EventRegistry implementation that keeps event handlers in a SortedListMap and filters the event handler calls based on the registered event handler arguments (id/mask).

Definition at line 150 of file EventHandlerContainer.hxx.

Member Typedef Documentation

◆ MaskLookupMap

typedef std::map<uint8_t, OneMaskMap> openlcb::TreeEventHandlers::MaskLookupMap
private

Definition at line 183 of file EventHandlerContainer.hxx.

◆ OneMaskMap

Constructor & Destructor Documentation

◆ TreeEventHandlers()

openlcb::TreeEventHandlers::TreeEventHandlers ( )

Definition at line 159 of file EventHandlerContainer.cxx.

Member Function Documentation

◆ create_iterator()

EventIterator * openlcb::TreeEventHandlers::create_iterator ( )
virtual

Creates a new event iterator. Caller takes ownership of object.

Implements openlcb::EventRegistry.

Definition at line 154 of file EventHandlerContainer.cxx.

◆ register_handler()

void openlcb::TreeEventHandlers::register_handler ( const EventRegistryEntry entry,
unsigned  mask 
)
virtual

Adds a new event handler to the registry.

Parameters
entryis the structure parametrizingthe registration.
maskis used for registering consecutive events; zero for registering just one event; otherwise use {align_mask} to compute the base value and mask to use for registering a range of events.

Implements openlcb::EventRegistry.

Definition at line 42 of file EventHandlerContainer.cxx.

◆ reserve()

void openlcb::TreeEventHandlers::reserve ( size_t  count)
virtual

Prepares storage for adding many event handlers.

Parameters
counthow many empty slots to reserve.

Reimplemented from openlcb::EventRegistry.

Definition at line 74 of file EventHandlerContainer.cxx.

◆ unregister_handler()

void openlcb::TreeEventHandlers::unregister_handler ( EventHandler handler,
uint32_t  user_arg = 0,
uint32_t  user_arg_mask = 0 
)
virtual

Removes all registered instances of a given event handler pointer.

Parameters
handlerthe handler for which to unregister entries
user_argvalues of the 32-bit user arg to remove
user_arg_mask32-bit mask where to verify user_arg being equal

Implements openlcb::EventRegistry.

Definition at line 51 of file EventHandlerContainer.cxx.

Friends And Related Symbol Documentation

◆ Iterator

friend class Iterator
friend

Definition at line 163 of file EventHandlerContainer.hxx.

Member Data Documentation

◆ handlers_

MaskLookupMap openlcb::TreeEventHandlers::handlers_
private

The registered handlers.

The offset in the first map tell us how many bits wide the registration is (it is the mask value in the register call).

Definition at line 187 of file EventHandlerContainer.hxx.


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