Cleans up completed routing transitions for a given token.
This method should be called after routing states have been updated to remove any nodes or networks that have completed their fade-out transitions and are no longer contributing to the output of their previous channels.
775{
776 std::vector<std::pair<std::shared_ptr<Node>, uint32_t>> nodes_to_remove;
777
779 if (!node->needs_channel_routing())
780 continue;
781
782 auto& state = node->get_routing_state();
783
785 for (uint32_t ch = 0; ch < 32; ch++) {
786 if ((state.from_channels & (1 << ch)) && !(state.to_channels & (1 << ch))) {
787 nodes_to_remove.emplace_back(node, ch);
788 }
789 }
790 state = RoutingState {};
791 }
792 }
793
794 for (auto& [node, channel] : nodes_to_remove) {
796 }
797
798 std::vector<std::pair<std::shared_ptr<Network::NodeNetwork>, uint32_t>> networks_to_cleanup;
799
801 if (!network || !network->needs_channel_routing())
802 continue;
803
804 auto& state = network->get_routing_state();
805
807 network->set_channel_mask(state.to_channels);
808
809 for (uint32_t ch = 0; ch < 32; ch++) {
810 if ((state.from_channels & (1 << ch)) && !(state.to_channels & (1 << ch))) {
811 networks_to_cleanup.emplace_back(network, ch);
812 }
813 }
814 state = RoutingState {};
815 }
816 }
817
818 for (auto& [network, channel] : networks_to_cleanup) {
819 network->remove_channel_usage(channel);
820
821 if (network->get_channel_mask() == 0) {
823 std::erase_if(networks, [&](const auto& n) { return n == network; });
825 }
826 }
827}
std::unordered_map< std::string, std::shared_ptr< Node > > m_Node_registry
Registry of all nodes by their string identifiers.
std::vector< std::shared_ptr< Network::NodeNetwork > > get_all_networks(ProcessingToken token) const
Get all networks for a specific token across all channels.
void remove_from_root(const std::shared_ptr< Node > &node, ProcessingToken token, unsigned int channel=0)
Remove node from a specific processing token and channel.
std::unordered_map< ProcessingToken, std::vector< std::shared_ptr< Network::NodeNetwork > > > m_audio_networks
Audio-sink networks Only populated for networks with OutputMode::AUDIO_SINK.
void unregister_network_global(const std::shared_ptr< Network::NodeNetwork > &network)
Unregister network globally.
@ COMPLETED
Routing transition has completed.