MayaFlux 0.5.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches
MayaFlux::Kakshya::DataProcessingChain Class Reference

Manages collections of DataProcessor objects as composable, container-specific pipelines. More...

#include <DataProcessingChain.hpp>

+ Collaboration diagram for MayaFlux::Kakshya::DataProcessingChain:

Public Member Functions

void add_processor (const std::shared_ptr< DataProcessor > &processor, const std::shared_ptr< SignalSourceContainer > &container, const std::string &tag="")
 Adds a processor to the end of the chain for a specific container.
 
void add_processor_at (const std::shared_ptr< DataProcessor > &processor, const std::shared_ptr< SignalSourceContainer > &container, size_t position)
 Adds a processor at a specific position in the chain.
 
 DataProcessingChain ()=default
 
void process (const std::shared_ptr< SignalSourceContainer > &container)
 Processes a container with all its associated processors in sequence.
 
void process_filtered (const std::shared_ptr< SignalSourceContainer > &container, const std::function< bool(const std::shared_ptr< DataProcessor > &)> &filter)
 Processes a container with only the processors matching a filter predicate.
 
void process_tagged (const std::shared_ptr< SignalSourceContainer > &container, const std::string &tag)
 Processes a container with only the processors carrying a specific tag.
 
template<typename ProcessorType >
void process_typed (const std::shared_ptr< SignalSourceContainer > &container)
 Processes a container with only processors of a specific derived type.
 
void remove_processor (const std::shared_ptr< DataProcessor > &processor, const std::shared_ptr< SignalSourceContainer > &container)
 Removes a processor from a container's chain.
 

Private Member Functions

void drain_pending_removals ()
 Flushes all removals deferred during the most recent process iteration.
 
void remove_processor_direct (const std::shared_ptr< DataProcessor > &processor, const std::shared_ptr< SignalSourceContainer > &container)
 Performs immediate removal of a processor from the chain.
 

Private Attributes

std::unordered_map< std::shared_ptr< SignalSourceContainer >, std::vector< std::shared_ptr< DataProcessor > > > m_container_processors
 Maps each container to its ordered processor sequence.
 
std::atomic< bool > m_is_processing { false }
 Guards all process variants against concurrent or re-entrant iteration.
 
std::vector< std::pair< std::shared_ptr< DataProcessor >, std::shared_ptr< SignalSourceContainer > > > m_pending_removal
 Removals deferred because they arrived during active iteration.
 
std::unordered_map< std::shared_ptr< DataProcessor >, std::string > m_processor_tags
 Maps processors to their optional tag strings.
 

Detailed Description

Manages collections of DataProcessor objects as composable, container-specific pipelines.

Each SignalSourceContainer maintains its own ordered processor sequence. Processors can be added, removed, or reordered at runtime. All process variants guard against iterator invalidation via an atomic processing flag; removal requests that arrive mid-iteration are deferred and drained after the loop completes.

Definition at line 16 of file DataProcessingChain.hpp.


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