MCPcopy Create free account
hub / github.com/CppMicroServices/CppMicroServices / GetService

Method GetService

framework/src/service/ServiceObjects.cpp:85–111  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

83 }
84
85 std::shared_ptr<void>
86 ServiceObjectsBase::GetService() const
87 {
88 if (!d->m_reference)
89 {
90 return nullptr;
91 }
92
93 auto interfaceMap = d->GetServiceInterfaceMap();
94 // interfaceMap can be null under certain circumstance e.g. if a constructor throws an
95 // exception in the service implementation. In that case, we bail out early.
96 if (!interfaceMap)
97 {
98 return nullptr;
99 }
100
101 auto bundle_ = d->m_context->bundle.lock();
102 if (!bundle_)
103 {
104 return nullptr;
105 }
106
107 auto serviceHolder = new ServiceHolder<void>(bundle_, d->m_reference, nullptr, interfaceMap);
108 std::shared_ptr<ServiceHolder<void>> h(serviceHolder, CustomServiceDeleter { serviceHolder });
109 auto deleter = h->interfaceMap->find(d->m_reference.GetInterfaceId())->second.get();
110 return std::shared_ptr<void>(h, deleter);
111 }
112
113 InterfaceMapConstPtr
114 ServiceObjectsBase::GetServiceInterfaceMap() const

Callers 5

AddingServiceMethod · 0.45

Calls 5

lockMethod · 0.80
getMethod · 0.80
GetInterfaceIdMethod · 0.80
findMethod · 0.45

Tested by

no test coverage detected