12template <
typename TYPE >
13inline ::ptr < TYPE > & ptr < TYPE >::operator = (const ::pointer < TYPE > & p)
21#if REFERENCING_DEBUGGING
23 auto prefererOld = m_preferer;
25 auto prefererNew = ::allocator::defer_push_referer(p.m_p, {p.m_p, this, __FUNCTION_FILE_LINE__});
29 p.m_p->increment_reference_count();
33 if (__pointer_is_set(pOld))
36#if REFERENCING_DEBUGGING
38 ::allocator::add_releaser(prefererOld);
46#if REFERENCING_DEBUGGING
48 m_preferer = prefererNew;
59template <
typename TYPE >
60inline ::ptr < TYPE > & ptr < TYPE >::operator = (::pointer < TYPE > && p)
67#if REFERENCING_DEBUGGING
69 auto prefererOld = m_preferer;
71 auto prefererNew = p.m_preferer;
77 p.m_pparticle =
nullptr;
79 if (__pointer_is_set(pOld))
81#if REFERENCING_DEBUGGING
83 ::allocator::add_releaser(prefererOld);
88#if REFERENCING_DEBUGGING
90 m_preferer = prefererNew;
99template <
typename TYPE >
100template <
typename TYPE2 >
101inline ::ptr < TYPE > & ptr < TYPE >::operator = (const ::pointer < TYPE2 > & p)
115 auto pNew =
dynamic_cast < TYPE
>(p.m_pparticle);
120#if REFERENCING_DEBUGGING
122 auto prefererOld = m_preferer;
124 auto prefererNew = ::allocator::defer_push_referer(p.m_p, {p.m_p, this, __FUNCTION_FILE_LINE__});
128 pNew->increment_reference_count();
132 if (__pointer_is_set(pOld))
135#if REFERENCING_DEBUGGING
137 ::allocator::add_releaser(prefererOld);
145#if REFERENCING_DEBUGGING
147 m_preferer = prefererNew;
158template <
typename TYPE >
159template <
typename TYPE2 >
160inline ::ptr < TYPE > & ptr < TYPE >::operator = (::pointer < TYPE2 > && p)
174 auto pNew =
dynamic_cast < TYPE *
>(p.m_psubparticle);
178#if REFERENCING_DEBUGGING
180 auto prefererOld = m_preferer;
182 auto prefererNew = p.m_preferer;
188 p.m_psubparticle =
nullptr;
190 if (__pointer_is_set(pOld))
192#if REFERENCING_DEBUGGING
194 ::allocator::add_releaser(prefererOld);
199#if REFERENCING_DEBUGGING
201 m_preferer = prefererNew;