classDiagram class ITunerSubscriber{ <> +OnStationErrorSignal(const Error& error) void +OnStationPropertyChanged(const Station& StationProperty) void } class ITuner{ <> +~ITuner() default +ChangeStationOperation(const std::string& stationId) void +ChangeStationOperationAsync(const std::string& stationId) std_future~void~ +setStationproperty(const Station& StationProperty) void +c_StationProperty() c_ref_Station +c_getPublisher() c_ptr_ITunerPublisher } class ITunerTracer{ +~TunerTracer() default +capture_state(ITuner* obj) void +trace_ChangeStationOperation(const std::string& stationId) void } class MonitoredTuner{ +explicit TracedTuner(ITuner* impl, std::unique_ptr~ITunerTuner~ logger) +swapUnderlyingImplementation(ITuner* impl) ptr_ITuner +disconnectFromUnderlyingImplementation() ptr_ITuner +~TracedTuner() +setStationproperty(const Station& StationProperty) void +c_StationProperty() c_ref_Station +ChangeStationOperation(const std::string& stationId) void +ChangeStationOperationAsync(const std::string& stationId) std_future~void~ + c_getPublisher() c_ptr_ITunerPublisher +OnStationErrorSignal(const Error& error) void +OnStationPropertyChanged(const Station& Value) void -ITuner* m_impl -std::unique_ptr~ITunerTracer~ m_tracer } ITuner <|-- MonitoredTuner ITunerSubscriber <|-- MonitoredTuner MonitoredTuner o-- ITuner MonitoredTuner *-- ITunerTracer class ApiGear_PocoImpl_Tracer class TunerTracer{ +TunerTracer(ApiGear::PocoImpl::Tracer* tracer) +~TunerTracer() default +capture_state(ITuner* obj) void +trace_ChangeStationOperation(const std::string& stationId) void -ApiGear::PocoImpl::Tracer* m_tracer } TunerTracer o-- ApiGear_PocoImpl_Tracer TunerTracer --|> ITunerTracer class MonitoredTunerFactory { $connect(ITuner* impl, ApiGear::PocoImpl::Tracer* tracer) ptr_MonitoredTuner } MonitoredTuner <-- MonitoredTunerFactory MonitoredTunerFactory <-- TunerTracer