File indexing completed on 2024-04-06 12:13:02
0001 #ifndef ServiceRegistry_ServiceToken_h
0002 #define ServiceRegistry_ServiceToken_h
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024 #include <memory>
0025
0026
0027
0028
0029 class testServicesManager;
0030 class TestServicesManagerOrder;
0031
0032 namespace edm {
0033 class ServiceRegistry;
0034 class ActivityRegistry;
0035
0036 namespace serviceregistry {
0037 class ServicesManager;
0038 }
0039
0040 class ServiceWeakToken;
0041
0042 class ServiceToken {
0043 friend class edm::ServiceRegistry;
0044 friend class edm::serviceregistry::ServicesManager;
0045
0046 friend class ::testServicesManager;
0047 friend class ::TestServicesManagerOrder;
0048
0049 public:
0050 ServiceToken() {}
0051
0052 ServiceToken(ServiceToken&&) = default;
0053 ServiceToken(ServiceToken const&) = default;
0054 ServiceToken& operator=(ServiceToken&&) = default;
0055 ServiceToken& operator=(ServiceToken const&) = default;
0056
0057
0058
0059
0060
0061
0062
0063
0064 void connectTo(ActivityRegistry&);
0065
0066 void connect(ActivityRegistry&);
0067
0068
0069 void copySlotsTo(ActivityRegistry&);
0070
0071 void copySlotsFrom(ActivityRegistry&);
0072
0073 friend class ServiceWeakToken;
0074
0075 private:
0076 ServiceToken(std::shared_ptr<edm::serviceregistry::ServicesManager> iManager) : manager_(iManager) {}
0077
0078
0079
0080
0081
0082
0083 std::shared_ptr<edm::serviceregistry::ServicesManager> manager_;
0084 };
0085
0086 class ServiceWeakToken {
0087 public:
0088 ServiceWeakToken(ServiceToken const& iToken) : manager_(iToken.manager_) {}
0089 ServiceWeakToken() = default;
0090
0091 ServiceWeakToken(ServiceWeakToken&&) = default;
0092 ServiceWeakToken(ServiceWeakToken const&) = default;
0093 ServiceWeakToken& operator=(ServiceWeakToken&&) = default;
0094 ServiceWeakToken& operator=(ServiceWeakToken const&) = default;
0095
0096 ServiceWeakToken& operator=(ServiceToken const& iToken) {
0097 manager_ = iToken.manager_;
0098 return *this;
0099 }
0100
0101 ServiceToken lock() const { return ServiceToken(manager_.lock()); }
0102
0103 private:
0104 std::weak_ptr<edm::serviceregistry::ServicesManager> manager_;
0105 };
0106 }
0107
0108 #endif