ServiceInstance¶
-
class ServiceInstance¶
Public Types
-
using Ptr = std::unique_ptr<ServiceInstance>¶
Public Functions
-
ServiceInstance() = default¶
Creates default invalid service instance.
-
inline explicit ServiceInstance(IServiceInstance::Ptr implementation, const ptrdiff_t castOffset = 0)¶
Created service instance with specified implementation and cast offset.
-
ServiceInstance(const ServiceInstance &other) = delete¶
-
ServiceInstance(ServiceInstance &&other) = default¶
-
ServiceInstance &operator=(const ServiceInstance &other) = delete¶
-
ServiceInstance &operator=(ServiceInstance &&other) = default¶
-
inline IServiceInstance *tryGetImplementation()¶
Try get service instance implementation.
-
inline const IServiceInstance *tryGetImplementation() const¶
Try get service instance implementation.
-
inline IServiceInstance &getImplementation()¶
Get service instance implementation.
If service instance implementation is nullptr, method throws exception
- Throws:
sb::di::NullPointerException –
-
inline const IServiceInstance &getImplementation() const¶
Get service instance implementation.
If service instance implementation is nullptr, method throws exception
- Throws:
sb::di::NullPointerException –
-
inline void addCastOffset(const ptrdiff_t castOffset)¶
cast offset is added to service pointer when get/release methods are used
-
inline void setCastOffset(const ptrdiff_t castOffset)¶
cast offset is added to service pointer when get/release methods are used
-
inline ptrdiff_t getCastOffset() const¶
cast offset is added to service pointer when get/release methods are used
-
inline bool isValid() const¶
Checks if service instance is valid (implementation is not nullptr and implementation is valid)
If service instance is invalid, get and move methods might lead to undefined behaviour
-
inline explicit operator bool() const¶
Wrapper around isValid method.
-
template<class T>
inline T *getAs() const¶ Returns service pointer as T *.
The client is responsible for ensuring that the T type is correct
Example:
T* service = instance.getAs<T>();
-
template<class T>
inline T *releaseAs()¶ Releases service ownership as pointer T *.
The client is responsible for ensuring that the T type is correct
Example:
T* service = instance.releaseAs<T>();
Warning
Using this method might cause memory leaks, client is responsible for managing this pointner lifetime, the best approach is to immediately wrap this pointer with proper std::unique_ptr<T>
-
template<class T>
inline std::unique_ptr<T> moveOutAsUniquePtr()¶ Moves out service as unique_ptr<T>
The client is responsible for ensuring that the T type is correct
Example:
std::unique_ptr<T> service = instance.moveOutAsUniquePtr<T>();
-
template<class T>
inline T &&moveOutAs()¶ Moves out service as T.
The client is responsible for ensuring that the T type is correct
Example:
T service = instance.moveOutAs<T>();
-
template<class T>
inline T copyAs()¶ Copies service as T.
The client is responsible for ensuring that the T type is correct
Example:
T service = instance.copyAs<T>();
-
inline void clear()¶
Clears service instance (implemnentation is reset)
after clearing instance becomes invalid
-
using Ptr = std::unique_ptr<ServiceInstance>¶