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 ITunerDecorator{ <> +swapUnderlyingImplementation(ITuner* impl) ptr_ITuner +disconnectFromUnderlyingImplementation() ptr_ITuner } ITuner <|-- ITunerDecorator ITunerSubscriber <|-- ITunerDecorator class AbstractTunerDecorator{ +explicit AbstractTunerDecorator(ITuner* impl) +swapUnderlyingImplementation(ITuner* impl) ptr_ITuner +disconnectFromUnderlyingImplementation() ptr_ITuner +~AbstractTunerDecorator() +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 -ITuner* m_impl } ITunerDecorator <|-- AbstractTunerDecorator AbstractTunerDecorator o-- ITuner 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 class TunerTracerDecorator { #explicit TunerTracerDecorator(ITuner* impl, ApiGear::PocoImpl::Tracer* tracer) $connect(ITuner* impl, ApiGear::PocoImpl::Tracer* tracer) ptr_TunerTracerDecorator +~TunerTracerDecorator() +ChangeStationOperation(const std::string& stationId) void +ChangeStationOperationAsync(const std::string& stationId) std_future~void~ +OnStationErrorSignal(const Error& error) void +OnStationPropertyChanged(const Station& Value) void -std::unique_ptr~TunerTracer~ m_tracer } AbstractTunerDecorator <|-- TunerTracerDecorator TunerTracerDecorator *-- TunerTracer