ServiceTrackerCustomizer interface allows a
* ServiceTracker to customize the service objects that are
* tracked. A ServiceTrackerCustomizer is called when a service is
* being added to a ServiceTracker. The
* ServiceTrackerCustomizer can then return an object for the
* tracked service. A ServiceTrackerCustomizer is also called when
* a tracked service is modified or has been removed from a
* ServiceTracker.
*
* The methods in this interface may be called as the result of a
* ServiceEvent being received by a ServiceTracker.
* Since ServiceEvents are synchronously delivered,
* it is highly recommended that implementations of these methods do
* not register (BundleContext::RegisterService), modify (
* ServiceRegistration::SetProperties) or unregister (
* ServiceRegistration::Unregister) a service while being
* synchronized on any object.
*
* The ServiceTracker class is thread-safe. It does not call a
* ServiceTrackerCustomizer while holding any locks.
* ServiceTrackerCustomizer implementations must also be
* thread-safe.
*
* \tparam S The type of the service being tracked
* \tparam T The type of the tracked object. The default is \c S.
* \remarks This class is thread safe.
*/
templateServiceTracker.
*
*
* This method is called before a service which matched the search
* parameters of the
* This method is called when a service being tracked by the
*
* This method is called after a service is no longer being tracked by the
* ServiceTracker is added to the
* ServiceTracker. This method should return the service object
* to be tracked for the specified ServiceReference. The
* returned service object is stored in the ServiceTracker and
* is available from the GetService and
* GetServices methods.
*
* @param reference The reference to the service being added to the
* ServiceTracker.
* @return The service object to be tracked for the specified referenced
* service or 0 if the specified referenced service
* should not be tracked.
*/
virtual std::shared_ptr& reference) = 0;
/**
* A service tracked by the ServiceTracker has been modified.
*
* ServiceTracker has had it properties modified.
*
* @param reference The reference to the service that has been modified.
* @param service The service object for the specified referenced service.
*/
virtual void ModifiedService(
const ServiceReference& reference,
const std::shared_ptrServiceTracker has been removed.
*
* ServiceTracker.
*
* @param reference The reference to the service that has been removed.
* @param service The service object for the specified referenced service.
*/
virtual void RemovedService(
const ServiceReference& reference,
const std::shared_ptr
{
struct TypeTraits
{
typedef S ServiceType;
typedef S TrackedType;
typedef S TrackedParmType;
static std::shared_ptr ConvertToTrackedType(const std::shared_ptr& t)
{
return t;
}
};
typedef typename TypeTraits::TrackedParmType TrackedParmType;
virtual ~ServiceTrackerCustomizer() {}
virtual std::shared_ptr& reference) = 0;
virtual void ModifiedService(
const ServiceReference& reference,
const std::shared_ptr& reference,
const std::shared_ptr& reference) = 0;
virtual void ModifiedService(
const ServiceReference& reference,
const std::shared_ptr& reference,
const std::shared_ptr& reference) = 0;
virtual void ModifiedService(
const ServiceReference& reference,
const std::shared_ptr& reference,
const std::shared_ptr