8#ifndef INCLUDED_BDLCC_SHAREDOBJECTPOOL
9#define INCLUDED_BDLCC_SHAREDOBJECTPOOL
256#include <bdlscm_version.h>
277#include <bsl_memory.h>
286template <
class TYPE,
class RESETTER>
316 template <
class CREATOR>
318 CREATOR* objectCreator,
439 const RESETTER& objectResetter,
492template <
class TYPE,
class RESETTER>
493template <
class CREATOR>
496 CREATOR* objectCreator,
500: d_objectResetter(objectResetter,basicAllocator)
503 (*objectCreator)(d_instance.buffer(), basicAllocator);
506template <
class TYPE,
class RESETTER>
510 d_instance.object().~TYPE();
514template <
class TYPE,
class RESETTER>
518 d_objectResetter.object()(&d_instance.object());
521template <
class TYPE,
class RESETTER>
525 d_pool_p->releaseObject(
this);
528template <
class TYPE,
class RESETTER>
531 const std::type_info& )
536template <
class TYPE,
class RESETTER>
544template <
class TYPE,
class RESETTER>
551template <
class TYPE,
class RESETTER>
555 return &d_instance.object();
563template <
class TYPE,
class CREATOR,
class RESETTER>
569 RepType *r =
new (memory) RepType(&d_objectCreator.object(),
573 r->resetCountsRaw(0, 0);
579#if defined(BSLS_PLATFORM_CMP_MSVC)
585#pragma warning(disable : 4355)
590template <
class TYPE,
class CREATOR,
class RESETTER>
593 const CREATOR& objectCreator,
594 const RESETTER& objectResetter,
597: d_objectCreator(objectCreator,basicAllocator)
598, d_objectResetter(objectResetter,basicAllocator)
599, d_pool(
bdlf::BindUtil::bind(&MyType::constructRepObject, this,
600 bdlf::PlaceHolders::_1,
601 bdlf::PlaceHolders::_2),
602 growBy, basicAllocator)
606template <
class TYPE,
class CREATOR,
class RESETTER>
611: d_objectCreator(basicAllocator)
612, d_objectResetter(basicAllocator)
613, d_pool(
bdlf::BindUtil::bind(&MyType::constructRepObject, this,
614 bdlf::PlaceHolders::_1,
615 bdlf::PlaceHolders::_2),
616 growBy, basicAllocator)
620template <
class TYPE,
class CREATOR,
class RESETTER>
623 const CREATOR& objectCreator,
626: d_objectCreator(objectCreator, basicAllocator)
627, d_objectResetter(basicAllocator)
628, d_pool(
bdlf::BindUtil::bind(&MyType::constructRepObject, this,
629 bdlf::PlaceHolders::_1,
630 bdlf::PlaceHolders::_2),
631 growBy, basicAllocator)
635template <
class TYPE,
class CREATOR,
class RESETTER>
638 const CREATOR& objectCreator,
640: d_objectCreator(objectCreator, basicAllocator)
641, d_objectResetter(basicAllocator)
642, d_pool(
bdlf::BindUtil::bind(&MyType::constructRepObject, this,
643 bdlf::PlaceHolders::_1,
644 bdlf::PlaceHolders::_2),
650#if defined(BSLS_PLATFORM_CMP_MSVC)
657template <
class TYPE,
class CREATOR,
class RESETTER>
664template <
class TYPE,
class CREATOR,
class RESETTER>
669 RepType *rep = d_pool.getObject();
676template <
class TYPE,
class CREATOR,
class RESETTER>
681 d_pool.increaseCapacity(growBy);
684template <
class TYPE,
class CREATOR,
class RESETTER>
689 d_pool.reserveCapacity(growBy);
693template <
class TYPE,
class CREATOR,
class RESETTER>
697 return d_pool.numAvailableObjects();
700template <
class TYPE,
class CREATOR,
class RESETTER>
704 return d_pool.numObjects();
Definition bdlcc_objectpool.h:430
Definition bdlcc_objectpool.h:446
Definition bdlcc_objectpool.h:694
Definition bdlcc_sharedobjectpool.h:287
void reset()
Definition bdlcc_sharedobjectpool.h:516
void * originalPtr() const BSLS_KEYWORD_OVERRIDE
Definition bdlcc_sharedobjectpool.h:546
TYPE * ptr()
Return a pointer to the in-place object.
Definition bdlcc_sharedobjectpool.h:553
void disposeObject() BSLS_KEYWORD_OVERRIDE
Definition bdlcc_sharedobjectpool.h:538
~SharedObjectPool_Rep() BSLS_KEYWORD_OVERRIDE
Definition bdlcc_sharedobjectpool.h:508
void * getDeleter(const std::type_info &type) BSLS_KEYWORD_OVERRIDE
Definition bdlcc_sharedobjectpool.h:530
void disposeRep() BSLS_KEYWORD_OVERRIDE
Definition bdlcc_sharedobjectpool.h:523
Definition bdlcc_sharedobjectpool.h:369
void reserveCapacity(int growBy)
Definition bdlcc_sharedobjectpool.h:687
CREATOR CreatorType
Definition bdlcc_sharedobjectpool.h:396
void increaseCapacity(int growBy)
Definition bdlcc_sharedobjectpool.h:679
~SharedObjectPool()
Definition bdlcc_sharedobjectpool.h:659
RESETTER ResetterType
Definition bdlcc_sharedobjectpool.h:397
SharedObjectPool(const CREATOR &objectCreator, const RESETTER &objectResetter, int growBy=-1, bslma::Allocator *basicAllocator=0)
Definition bdlcc_sharedobjectpool.h:592
BSLMF_NESTED_TRAIT_DECLARATION(SharedObjectPool, bslma::UsesBslmaAllocator)
SharedObjectPool(const CREATOR &objectCreator, bslma::Allocator *basicAllocator=0)
Definition bdlcc_sharedobjectpool.h:637
SharedObjectPool(const CREATOR &objectCreator, int growBy, bslma::Allocator *basicAllocator=0)
Definition bdlcc_sharedobjectpool.h:622
bsl::shared_ptr< TYPE > getObject()
Definition bdlcc_sharedobjectpool.h:667
SharedObjectPool(int growBy=-1, bslma::Allocator *basicAllocator=0)
Definition bdlcc_sharedobjectpool.h:608
int numObjects() const
Definition bdlcc_sharedobjectpool.h:702
int numAvailableObjects() const
Return a snapshot of the number of objects available in this pool.
Definition bdlcc_sharedobjectpool.h:695
Definition bslstl_sharedptr.h:1838
Definition bslalg_constructorproxy.h:376
Definition bslma_allocator.h:545
Definition bslma_sharedptrrep.h:338
void resetCountsRaw(int numSharedReferences, int numWeakReferences)
#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 bdlcc_boundedqueue.h:270
Definition bdlf_bind.h:979
bsl::function< void(void *, bslma::Allocator *)> DefaultCreator
Definition bdlcc_objectpool.h:421
Definition bdlcc_objectpool.h:663
static BSLS_KEYWORD_CONSTEXPR void * voidify(TYPE *address) BSLS_KEYWORD_NOEXCEPT
Definition bslma_pointerutil.h:350
Definition bslma_usesbslmaallocator.h:344
Definition bsls_objectbuffer.h:277