95# ifndef DRIVEN_TABLE_H
96# define DRIVEN_TABLE_H
101# include <functional>
103# include <type_traits>
113using Event_Fct [[deprecated(
"Use the templated Event_Table with std::function handlers instead")]]
137template <
typename Signature>
178 template <
typename Callable>
195 template <
typename Callable>
234 template <
typename F>
250 template <
typename...
Args>
254 <<
"index " << index <<
" out of range [0, " <<
size() <<
')';
294 template <
typename Callable>
303 template <
typename Callable>
324 bool check(
const size_t index,
void* (*
fct)(
void*))
const
335 return target && *target ==
fct;
342 <<
"index " << index <<
" out of range [0, " <<
size() <<
')';
379template <
typename Signature>
386 std::unique_ptr<Event_Handler[]>
table;
449 other.size_table = 0;
465 other.size_table = 0;
515template <
typename Signature>
528 return handler ? &handler :
nullptr;
Exception handling system with formatted messages for Aleph-w.
#define ah_range_error_if(C)
Throws std::range_error if condition holds.
Core header for the Aleph-w library.
size_t size() const noexcept
Return the current dimension of array.
Dynamic (growable) event table implementation.
size_t size() const override
Get the current table size (implements Event_Table virtual method)
typename Event_Table< Signature >::Event_Handler Event_Handler
const Event_Handler * read_table(const size_t i) const override
Read event at index (implements Event_Table virtual method)
Dynamic_Event_Table & operator=(const Dynamic_Event_Table &)=delete
Dynamic_Event_Table(Dynamic_Event_Table &&) noexcept=default
Move constructor.
Dynamic_Event_Table(const Dynamic_Event_Table &)=delete
Copying disabled (events may contain non-copyable captures)
Dynamic_Event_Table(const size_t num_events=0)
Construct a dynamic event table.
DynArray< Event_Handler > table
Dynamic array of event handlers.
void clear_slot(size_t i) override
Clear event at index (implements Event_Table virtual method)
void write_table(const size_t i, Event_Handler &&event_fct) override
Write event at index (implements Event_Table virtual method)
void append_event_to_table(Event_Handler &&fct)
void register_event(const size_t index, Callable &&fct)
virtual ~Event_Table()=default
bool check(const size_t index, void *(*fct)(void *)) const
std::function< void *(void *)> Event_Handler
size_t register_event(Callable &&fct)
virtual size_t size() const =0
void unregister_event(const size_t index)
virtual const Event_Handler * read_table(size_t i) const =0
virtual void write_table(size_t i, Event_Handler &&event_fct)=0
virtual void clear_slot(size_t i)=0
void * execute_event(const size_t index, void *input=nullptr) const
bool is_registered(const size_t index) const
Abstract base class for type-safe event tables.
virtual void write_table(size_t i, Event_Handler &&event_fct)=0
virtual size_t size() const =0
Get the number of event slots in the table.
void append_event_to_table(Event_Handler &&fct)
Append an event to the end of the table (internal use).
bool is_registered(const size_t index) const
Check if an event is registered at the given index.
virtual ~Event_Table()=default
Virtual destructor for proper cleanup in derived classes.
void register_event(const size_t index, Callable &&fct)
Register an event at a specific index.
std::function< Signature > Event_Handler
virtual void clear_slot(size_t i)=0
size_t register_event(Callable &&fct)
Append a new event and return its auto-assigned index.
void unregister_event(const size_t index)
Unregister an event at the given index.
bool check(const size_t, F) const
Legacy check method (for backward compatibility).
virtual const Event_Handler * read_table(size_t i) const =0
auto execute_event(const size_t index, Args &&... args) const
Execute the event at the given index with type-safe arguments.
Fixed-size event table implementation.
void write_table(const size_t i, Event_Handler &&event_fct) override
Write event at index (implements Event_Table virtual method)
void clear_slot(size_t i) override
Clear event at index (implements Event_Table virtual method)
Static_Event_Table(const size_t num_events=0)
Construct a static event table with a fixed size.
~Static_Event_Table() override=default
Destructor - automatically frees the underlying array.
Static_Event_Table(const Static_Event_Table &)=delete
Copying disabled (events may contain non-copyable captures)
Static_Event_Table & operator=(const Static_Event_Table &)=delete
Static_Event_Table & operator=(Static_Event_Table &&other) noexcept
Move assignment - transfers ownership of the array.
size_t size_table
Fixed size of the table.
typename Event_Table< Signature >::Event_Handler Event_Handler
std::unique_ptr< Event_Handler[]> table
Array of event handlers.
const Event_Handler * read_table(const size_t i) const override
Read event at index (implements Event_Table virtual method)
Static_Event_Table(Static_Event_Table &&other) noexcept
Move constructor - transfers ownership of the array.
void verify_index(const size_t i) const
Verify index is within valid range.
size_t size() const override
Get table size (implements Event_Table virtual method)
void *(*)(void *) Event_Fct
Type alias for legacy event handler functions.
size_t blossom_maximum_cardinality_matching(const GT &g, DynDlist< typename GT::Arc * > &matching, SA sa=SA())
Alias of compute_maximum_cardinality_general_matching().
size_t size(Node *root) noexcept
and
Check uniqueness with explicit hash + equality functors.
Lazy and scalable dynamic array implementation.