8#ifndef INCLUDED_BSLMA_SHAREDPTROUTOFPLACEREP
9#define INCLUDED_BSLMA_SHAREDPTROUTOFPLACEREP
232#include <bslscm_version.h>
258template <
class TYPE,
class DELETER>
259struct SharedPtrOutofplaceRep_InitProctor;
260struct SharedPtrOutofplaceRep_DeleterHelper;
261struct SharedPtrOutofplaceRep_DeleterType;
262template <
class DELETER>
263class SharedPtrOutofplaceRep_DeleterDiscriminator;
313template <
class TYPE,
class DELETER>
356 const DELETER& deleter,
361 const DELETER& deleter,
366 const DELETER& deleter,
371 const DELETER& deleter,
377 const DELETER& deleter,
402 const DELETER& deleter,
450template <
class DELETER,
bool IS_ALLOC_PTR>
474 VALUE = BSLMA_USES_ALLOC
475 ? BSLMA_USES_ALLOC_ARG_T
493template <
class DELETER>
520template <
class DELETER>
533 VALUE = ImpType::VALUE
538 typedef typename ImpType::Type
Type;
563 template <
class TYPE,
class DELETER>
564 static void deleteObject(
572 template <
class TYPE,
class DELETER>
573 static void deleteObject(
581 template <
class TYPE,
class DELETER>
582 static void deleteObject(
590 template <
class TYPE,
class DELETER>
591 static void deleteObject(
600 template <
class TYPE,
class DELETER>
601 static void deleteObject(
610 template <
class TYPE,
class DELETER>
611 static void deleteObject(TYPE *ptr, DELETER& deleter);
632template <
class TYPE,
class DELETER>
667template <
class TYPE,
class DELETER>
671 const DELETER& deleter,
676 enum { BSLMA_DELETER_TYPE =
694template <
class TYPE,
class DELETER>
697 const DELETER& deleter,
700: d_deleter(
Default::allocator(deleter))
702, d_allocator_p(basicAllocator)
706template <
class TYPE,
class DELETER>
707SharedPtrOutofplaceRep<TYPE, DELETER>::SharedPtrOutofplaceRep(
709 const DELETER& deleter,
710 Allocator *basicAllocator,
714, d_allocator_p(basicAllocator)
718template <
class TYPE,
class DELETER>
719SharedPtrOutofplaceRep<TYPE, DELETER>::SharedPtrOutofplaceRep(
721 const DELETER& deleter,
722 Allocator *basicAllocator,
724: d_deleter(deleter, basicAllocator)
726, d_allocator_p(basicAllocator)
730template <
class TYPE,
class DELETER>
731SharedPtrOutofplaceRep<TYPE, DELETER>::SharedPtrOutofplaceRep(
733 const DELETER& deleter,
734 Allocator *basicAllocator,
736: d_deleter(
bsl::allocator_arg, basicAllocator, deleter)
738, d_allocator_p(basicAllocator)
742template <
class TYPE,
class DELETER>
743SharedPtrOutofplaceRep<TYPE, DELETER>::SharedPtrOutofplaceRep(
745 const DELETER& deleter,
746 Allocator *basicAllocator,
750, d_allocator_p(basicAllocator)
754template <
class TYPE,
class DELETER>
755SharedPtrOutofplaceRep<TYPE, DELETER>::~SharedPtrOutofplaceRep()
760template <
class TYPE,
class DELETER>
763 SharedPtrOutofplaceRep_DeleterHelper::deleteObject(d_ptr_p, d_deleter);
767template <
class TYPE,
class DELETER>
786template <
class TYPE,
class DELETER>
791 return (
typeid(d_deleter) == type)
797template <
class TYPE,
class DELETER>
804template <
class TYPE,
class DELETER>
816template <
class TYPE,
class DELETER>
818void SharedPtrOutofplaceRep_DeleterHelper::deleteObject(
823 deleter->deleteObject(ptr);
826template <
class TYPE,
class DELETER>
828void SharedPtrOutofplaceRep_DeleterHelper::deleteObject(
833 deleter->deleteObject(ptr);
836template <
class TYPE,
class DELETER>
838void SharedPtrOutofplaceRep_DeleterHelper::deleteObject(
846template <
class TYPE,
class DELETER>
848void SharedPtrOutofplaceRep_DeleterHelper::deleteObject(
856template <
class TYPE,
class DELETER>
858void SharedPtrOutofplaceRep_DeleterHelper::deleteObject(
866template <
class TYPE,
class DELETER>
868void SharedPtrOutofplaceRep_DeleterHelper::deleteObject(TYPE *ptr,
871 enum { BSLMA_DELETER_TYPE =
874 SharedPtrOutofplaceRep_DeleterHelper::deleteObject(
885template <
class TYPE,
class DELETER>
894template <
class TYPE,
class DELETER>
916 DELETER>::type tempDeleter(d_deleter);
917 SharedPtrOutofplaceRep_DeleterHelper::deleteObject(d_ptr_p, tempDeleter);
921template <
class TYPE,
class DELETER>
932template <
class TYPE,
class DELETER>
Definition bslma_allocator.h:545
virtual void deallocate(void *address)=0
Allocator * Type
Definition bslma_sharedptroutofplacerep.h:511
Definition bslma_sharedptroutofplacerep.h:451
bsl::conditional< bsl::is_function< DELETER >::value, DELETER *, DELETER >::type Type
Definition bslma_sharedptroutofplacerep.h:487
@ VALUE
Definition bslma_sharedptroutofplacerep.h:474
Definition bslma_sharedptroutofplacerep.h:521
ImpType::Type Type
Definition bslma_sharedptroutofplacerep.h:538
@ VALUE
Definition bslma_sharedptroutofplacerep.h:533
Definition bslma_sharedptroutofplacerep.h:314
void disposeObject() BSLS_KEYWORD_OVERRIDE
Definition bslma_sharedptroutofplacerep.h:761
void disposeRep() BSLS_KEYWORD_OVERRIDE
Definition bslma_sharedptroutofplacerep.h:769
static SharedPtrOutofplaceRep< TYPE, DELETER > * makeOutofplaceRep(TYPE *ptr, const DELETER &deleter, Allocator *basicAllocator=0)
Definition bslma_sharedptroutofplacerep.h:669
void * originalPtr() const BSLS_KEYWORD_OVERRIDE
Definition bslma_sharedptroutofplacerep.h:799
void * getDeleter(const std::type_info &type) BSLS_KEYWORD_OVERRIDE
Definition bslma_sharedptroutofplacerep.h:789
TYPE * ptr() const
Definition bslma_sharedptroutofplacerep.h:806
Definition bslma_sharedptrrep.h:338
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
#define BSLS_KEYWORD_OVERRIDE
Definition bsls_keyword.h:695
Definition bdlat_valuetypefunctions.h:939
Definition baljsn_encoder_testtypes.h:76
Definition bslmf_conditional.h:123
Definition bslmf_integralconstant.h:261
Definition bslmf_isconvertible.h:875
Definition bslmf_ispointer.h:138
Definition bslma_default.h:745
static Allocator * allocator(Allocator *basicAllocator=0)
Definition bslma_default.h:913
static BSLS_KEYWORD_CONSTEXPR void * voidify(TYPE *address) BSLS_KEYWORD_NOEXCEPT
Definition bslma_pointerutil.h:350
Definition bslma_sharedptroutofplacerep.h:549
SharedPtrOutofplaceRep_DeleterType DeleterType
Definition bslma_sharedptroutofplacerep.h:555
Definition bslma_sharedptroutofplacerep.h:273
@ BSLMA_FUNCTOR_WITH_ALLOC_ARG_T
Definition bslma_sharedptroutofplacerep.h:290
@ BSLMA_FUNCTOR_WITHOUT_ALLOC
Definition bslma_sharedptroutofplacerep.h:296
@ BSLMA_ALLOCATOR_PTR
Definition bslma_sharedptroutofplacerep.h:278
@ BSLMA_FACTORY_PTR
Definition bslma_sharedptroutofplacerep.h:282
@ BSLMA_FUNCTOR_WITH_ALLOC
Definition bslma_sharedptroutofplacerep.h:286
Definition bslma_sharedptroutofplacerep.h:633
void release()
Release from management the object referred to by this proctor.
Definition bslma_sharedptroutofplacerep.h:923
SharedPtrOutofplaceRep_InitProctor(TYPE *ptr, const DELETER &deleter)
Definition bslma_sharedptroutofplacerep.h:888
const DELETER & d_deleter
Definition bslma_sharedptroutofplacerep.h:639
TYPE * d_ptr_p
Definition bslma_sharedptroutofplacerep.h:636
~SharedPtrOutofplaceRep_InitProctor()
Definition bslma_sharedptroutofplacerep.h:897
Definition bslma_usesbslmaallocator.h:344
Definition bslmf_functionpointertraits.h:163
Definition bslmf_usesallocatorargt.h:100
static TYPE * addressOf(TYPE &obj)
Definition bsls_util.h:312