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.
747{
748 std::vector<std::pair<std::shared_ptr<Node>, uint32_t>> nodes_to_remove;
749
751 if (!node->needs_channel_routing())
752 continue;
753
754 auto& state = node->get_routing_state();
755
757 for (uint32_t ch = 0; ch < 32; ch++) {
758 if ((state.from_channels & (1 << ch)) && !(state.to_channels & (1 << ch))) {
759 nodes_to_remove.emplace_back(node, ch);
760 }
761 }
762 state = RoutingState {};
763 }
764 }
765
766 for (auto& [node, channel] : nodes_to_remove) {
768 }
769
770 std::vector<std::pair<std::shared_ptr<Network::NodeNetwork>, uint32_t>> networks_to_cleanup;
771
774 continue;
775
776 auto& state =
network->get_routing_state();
777
779 network->set_channel_mask(state.to_channels);
780
781 for (uint32_t ch = 0; ch < 32; ch++) {
782 if ((state.from_channels & (1 << ch)) && !(state.to_channels & (1 << ch))) {
783 networks_to_cleanup.emplace_back(
network, ch);
784 }
785 }
786 state = RoutingState {};
787 }
788 }
789
790 for (
auto& [
network, channel] : networks_to_cleanup) {
791 network->remove_channel_usage(channel);
792
793 if (
network->get_channel_mask() == 0) {
795 std::erase_if(networks, [&](
const auto& n) {
return n ==
network; });
797 }
798 }
799}
Core::GlobalNetworkConfig network
std::unordered_set< 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.