AthCUDA::StreamPoolSvc Node1 AthCUDA::StreamPoolSvc - m_nStreams + initialize() + finalize() + isEmpty() + getAvailableStream() + yieldStream() * m_nStreams * initialize() * finalize() * isEmpty() * getAvailableStream() * yieldStream() Node2 extends< AthService, IStreamPoolSvc > Node2->Node1 Node3 std::unique_ptr< AthCUDA ::StreamPoolSvcImpl > + operator->() Node3->Node1 -m_impl Node4 AthCUDA::StreamPoolSvcImpl - m_data + StreamPoolSvcImpl() + StreamPoolSvcImpl() + StreamPoolSvcImpl() + ~StreamPoolSvcImpl() + operator=() + operator=() + getAvailableStream() + yieldStream() * getAvailableStream() * yieldStream() Node4->Node3 +ptr Node5 AthCUDA::IStreamPoolSvc + DeclareInterfaceID() + isEmpty() + getAvailableStream() # yieldStream() Node5->Node4 -m_svc Node6 IService Node6->Node5