7 processor->on_attach(container);
15 const std::shared_ptr<SignalSourceContainer>& container,
18 processor->on_attach(container);
21 if (position >= processors.size()) {
22 processors.push_back(processor);
24 processors.insert(processors.begin() + position, processor);
32 auto& processors = it->second;
33 auto proc_it = std::find(processors.begin(), processors.end(), processor);
35 if (proc_it != processors.end()) {
36 processor->on_detach(container);
37 processors.erase(proc_it);
39 if (processors.empty()) {
50 for (
auto& processor : it->second) {
51 processor->process(container);
60 for (
auto& processor : it->second) {
61 if (filter(processor)) {
62 processor->process(container);
72 for (
auto& processor : it->second) {
75 processor->process(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.
void process_tagged(const std::shared_ptr< SignalSourceContainer > &container, const std::string &tag)
Processes a container with processors that have a specific tag.
void add_processor(const std::shared_ptr< DataProcessor > &processor, const std::shared_ptr< SignalSourceContainer > &container, const std::string &tag="")
Adds a processor to the chain for a specific container.
void process(const std::shared_ptr< SignalSourceContainer > &container)
Processes a container with all its associated processors, in sequence.
void remove_processor(const std::shared_ptr< DataProcessor > &processor, const std::shared_ptr< SignalSourceContainer > &container)
Removes a processor from a container's chain.
void process_filtered(const std::shared_ptr< SignalSourceContainer > &container, const std::function< bool(const std::shared_ptr< DataProcessor > &)> &filter)
Processes a container with processors that match a filter function.
std::unordered_map< std::shared_ptr< DataProcessor >, std::string > m_processor_tags
Maps processors to their associated tags for categorization and filtering.
std::unordered_map< std::shared_ptr< SignalSourceContainer >, std::vector< std::shared_ptr< DataProcessor > > > m_container_processors
Maps containers to their associated processors in sequence order.