20 #ifndef INCLUDED_VCL_PTR_HXX
21 #define INCLUDED_VCL_PTR_HXX
25 #include <rtl/ref.hxx>
28 #include <type_traits>
45 {
return std::is_base_of<VclReferenceBase, T>::value; }
56 template <
class reference_type>
60 vcl::detail::isIncompleteOrDerivedFromVclReferenceBase<reference_type>(
62 "template argument type must be derived from VclReferenceBase");
81 VclPtr (reference_type * pBody, __sal_NoAcquire)
82 : m_rInnerRef(pBody, SAL_NO_ACQUIRE)
93 template<
class derived_type >
96 typename std::enable_if<
97 std::is_base_of<reference_type, derived_type>::value,
int>::type
99 : m_rInnerRef( static_cast<reference_type*>(rRef) )
103 #if defined(DBG_UTIL) && !defined(_WIN32)
109 assert((!m_rInnerRef.get() || m_rInnerRef->isDisposed() || m_rInnerRef->getRefCount() > 1)
110 &&
"someone forgot to call dispose()");
136 return m_rInnerRef.get();
143 reference_type *
get()
const
145 return m_rInnerRef.get();
148 void set(reference_type *pBody)
150 m_rInnerRef.set(pBody);
155 m_rInnerRef.set(pBody);
164 template<
typename derived_type>
165 typename std::enable_if<
166 std::is_base_of<reference_type, derived_type>::value,
170 m_rInnerRef.set(rRef.
get());
176 m_rInnerRef.set(pBody);
180 operator reference_type * ()
const
182 return m_rInnerRef.get();
185 explicit operator bool ()
const
187 return m_rInnerRef.get() !=
nullptr;
212 bool operator< (const VclPtr<reference_type> & handle)
const
214 return (m_rInnerRef < handle.m_rInnerRef);
218 template<
typename T1,
typename T2>
220 return p1.
get() == p2.
get();
225 return p1.
get() == p2;
229 return p1.
get() == p2;
234 return p1 == p2.
get();
238 return p1 == p2.
get();
241 template<
typename T1,
typename T2>
274 template <
class reference_type>
290 template <
class reference_type>
297 :
VclPtr<reference_type>()
303 :
VclPtr<reference_type>(pBody)
309 :
VclPtr<reference_type>(handle)
317 if (pBody != this->
get()) {
340 template<
class derived_type >
343 typename std::enable_if<
344 std::is_base_of<reference_type, derived_type>::value,
int>::type
346 :
VclPtr<reference_type>( rRef )
356 template<
typename derived_type>
357 typename std::enable_if<
358 std::is_base_of<reference_type, derived_type>::value,
384 void reset() =
delete;
385 void reset(reference_type *pBody) =
delete;
389 :
VclPtr<reference_type>(pBody, SAL_NO_ACQUIRE)
403 #pragma warning(push)
404 #pragma warning(disable: 4521) // " multiple copy constructors specified"
406 template <
class reference_type>
440 #endif // INCLUDED_VCL_PTR_HXX
VclPtrInstance(Arg &&...arg)
ScopedVclPtr(reference_type *pBody)
Constructor.
VclPtr & operator=(VclPtr const &)=default
static ScopedVclPtr< reference_type > Create(Arg &&...)=delete
Override and disallow this, to prevent people accidentally calling it and actually getting VclPtr::Cr...
A thin wrapper around rtl::Reference to implement the acquire and dispose semantics we want for refer...
ScopedVclPtr(const VclPtr< derived_type > &rRef, typename std::enable_if< std::is_base_of< reference_type, derived_type >::value, int >::type=0)
Up-casting conversion constructor: Copies interface reference.
ScopedVclPtrInstance(Arg &&...arg)
VclPtr(reference_type *pBody, __sal_NoAcquire)
Constructor...
A construction helper for ScopedVclPtr.
void disposeAndReset(reference_type *pBody)
Assignment that releases the last reference.
const BorderLinePrimitive2D *pCandidateB assert(pCandidateA)
VclPtr(reference_type *pBody)
Constructor...
VclPtr(const VclPtr< derived_type > &rRef, typename std::enable_if< std::is_base_of< reference_type, derived_type >::value, int >::type=0)
Up-casting conversion constructor: Copies interface reference.
bool operator==(VclPtr< T1 > const &p1, VclPtr< T2 > const &p2)
reference_type * operator->() const
Probably most common used: handle->someBodyOp().
ScopedVclPtr< reference_type > & operator=(reference_type *pBody)
Assignment that releases the last reference.
ScopedVclPtr(reference_type *pBody, __sal_NoAcquire)
void reset(reference_type *pBody)
ScopedVclPtr()
Constructor...
A construction helper for a temporary VclPtr.
::rtl::Reference< reference_type > m_rInnerRef
bool operator!=(VclPtr< T1 > const &p1, VclPtr< T2 > const &p2)
constexpr bool isIncompleteOrDerivedFromVclReferenceBase(...)
static VclPtr< reference_type > Create(Arg &&...arg)
A construction helper for VclPtr.
ScopedVclPtr(const VclPtr< reference_type > &handle)
Copy constructor...
void set(reference_type *pBody)
reference_type * get() const
Get the body.