13class TrackRouting :
public QObject
19 TrackRouting (TrackRegistry &track_registry, QObject * parent =
nullptr)
20 : QObject (parent), track_registry_ (track_registry)
28 Q_INVOKABLE QVariant getOutputTrack (
const Track * source)
const;
31 setOutputTrack (
const Track * source,
const Track * destination);
41 add_or_replace_route (
const TrackUuid &source,
const TrackUuid &destination)
43 track_routes_.insert_or_assign (source, destination);
46 void remove_route_for_source (
const TrackUuid &source)
48 track_routes_.erase (source);
51 void remove_routes_for_destination (
const TrackUuid &destination)
53 std::erase_if (track_routes_, [&destination] (
const auto &kv) {
54 return kv.second == destination;
59 std::optional<TrackUuidReference>
60 get_output_track (
const TrackUuid &source)
const;
63 static constexpr auto kTrackRoutesKey =
"trackRoutes"sv;
64 friend void to_json (nlohmann::json &j,
const TrackRouting &t)
66 j[kTrackRoutesKey] = t.track_routes_;
68 friend void from_json (
const nlohmann::json &j, TrackRouting &t)
70 j.at (kTrackRoutesKey).get_to (t.track_routes_);
74 TrackRegistry &track_registry_;
79 std::unordered_map<TrackUuid, TrackUuid> track_routes_;