22 #ifndef _BLAZE_UTIL_SMARTPTR_SHAREDPTR_H_
23 #define _BLAZE_UTIL_SMARTPTR_SHAREDPTR_H_
85 virtual void destroy() = 0;
165 template<
typename Type >
203 template<
typename Type >
218 template<
typename Type >
246 template<
typename Type >
247 explicit inline RefCount( Type* ptr );
290 template<
typename Type >
303 : counter_(count.counter_)
375 template<
typename Type >
381 template<
typename Other >
friend class SharedPtr;
395 template<
typename Other >
400 template<
typename Other >
411 template<
typename Other >
458 template<
typename Type >
475 template<
typename Type >
476 template<
typename Other >
492 template<
typename Type >
495 , counter_(ptr.counter_)
508 template<
typename Type >
509 template<
typename Other >
512 , counter_(ptr.counter_)
528 template<
typename Type >
552 template<
typename Type >
572 template<
typename Type >
573 template<
typename Other >
596 template<
typename Type >
599 pe_USER_ASSERT( ptr_,
"Uninitialized shared pointer" );
610 template<
typename Type >
613 pe_USER_ASSERT( ptr_,
"Uninitialized shared pointer" );
634 template<
typename Type >
638 counter_.swap( ptr.counter_ );
652 template<
typename Type >
667 template<
typename Type >
668 inline typename SharedPtr<Type>::Pointer SharedPtr<Type>::get()
const
687 template<
typename L,
typename R >
688 inline bool operator==(
const SharedPtr<L>& lhs,
const SharedPtr<R>& rhs );
690 template<
typename Type >
691 inline bool operator==(
const SharedPtr<Type>& ptr,
const Null& null );
693 template<
typename Type >
694 inline bool operator==(
const Null& null,
const SharedPtr<Type>& ptr );
696 template<
typename L,
typename R >
697 inline bool operator!=(
const SharedPtr<L>& lhs,
const SharedPtr<R>& rhs );
699 template<
typename Type >
700 inline bool operator!=(
const SharedPtr<Type>& ptr,
const Null& null );
702 template<
typename Type >
703 inline bool operator!=(
const Null& null,
const SharedPtr<Type>& ptr );
705 template<
typename L,
typename R >
706 inline bool operator<( const SharedPtr<L>& lhs,
const SharedPtr<R>& rhs );
708 template<
typename L,
typename R >
709 inline bool operator>(
const SharedPtr<L>& lhs,
const SharedPtr<R>& rhs );
711 template<
typename Type >
712 inline void swap( SharedPtr<Type>& a, SharedPtr<Type>& b )
throw();
724 template<
typename L,
typename R >
727 return lhs.get() == rhs.get();
739 template<
typename Type >
742 return ptr.get() == null;
754 template<
typename Type >
757 return null == ptr.get();
769 template<
typename L,
typename R >
772 return lhs.get() != rhs.get();
784 template<
typename Type >
787 return ptr.get() != null;
799 template<
typename Type >
802 return null != ptr.get();
814 template<
typename L,
typename R >
815 inline bool operator<( const SharedPtr<L>& lhs,
const SharedPtr<R>& rhs )
817 return lhs.get() < rhs.get();
829 template<
typename L,
typename R >
832 return lhs.get() > rhs.get();
845 template<
typename Type >