20 #ifndef INCLUDED_RTL_INSTANCE_HXX 21 #define INCLUDED_RTL_INSTANCE_HXX 28 #if ! HAVE_THREADSAFE_STATICS 267 template<
typename Inst,
typename InstCtor,
268 typename Guard,
typename GuardCtor,
269 typename Data = int,
typename DataCtor =
int >
273 static inline Inst * create(InstCtor aInstCtor, GuardCtor aGuardCtor)
276 static Inst * m_pInstance = 0;
278 Inst * p = m_pInstance;
281 Guard aGuard(aGuardCtor());
297 static inline Inst * create(InstCtor aInstCtor, GuardCtor aGuardCtor,
301 static Inst * m_pInstance = 0;
303 Inst * p = m_pInstance;
306 Data aData(aDataCtor());
307 Guard aGuard(aGuardCtor());
311 p = aInstCtor(aData);
323 static inline Inst * create(InstCtor aInstCtor, GuardCtor aGuardCtor,
327 static Inst * m_pInstance = 0;
329 Inst * p = m_pInstance;
332 Guard aGuard(aGuardCtor());
336 p = aInstCtor(rData);
349 #if !defined _MSC_VER 350 static Inst * m_pInstance;
354 #if !defined _MSC_VER 355 template<
typename Inst,
typename InstCtor,
356 typename Guard,
typename GuardCtor,
357 typename Data,
typename DataCtor >
359 rtl_Instance< Inst, InstCtor, Guard, GuardCtor, Data, DataCtor >::m_pInstance
386 #if HAVE_THREADSAFE_STATICS 387 template<
typename T,
typename Unique>
402 template<
typename T,
typename Unique>
412 return *rtl_Instance<
418 struct StaticInstance {
446 #if HAVE_THREADSAFE_STATICS 447 template<
typename T,
typename Data,
typename Unique>
456 static T &
get(
const Data& rData) {
457 static T instance(rData);
467 static T &
get(Data& rData) {
468 static T instance(rData);
473 template<
typename T,
typename Data,
typename Unique>
482 static T &
get(
const Data& rData) {
483 return *rtl_Instance<
484 T, StaticInstanceWithArg,
486 Data >::create( StaticInstanceWithArg(),
497 static T &
get(Data& rData) {
498 return *rtl_Instance<
499 T, StaticInstanceWithArg,
501 Data >::create( StaticInstanceWithArg(),
506 struct StaticInstanceWithArg {
507 T * operator () (
const Data& rData) {
508 static T instance(rData);
512 T * operator () (Data& rData) {
513 static T instance(rData);
528 #if HAVE_THREADSAFE_STATICS 529 template<
typename T,
typename InitAggregate>
540 static T *instance = InitAggregate()();
545 template<
typename T,
typename InitAggregate>
593 #if HAVE_THREADSAFE_STATICS 594 template<
typename T,
typename InitData,
595 typename Unique = InitData,
typename Data = T>
605 static T instance = InitData()();
610 template<
typename T,
typename InitData,
611 typename Unique = InitData,
typename Data = T>
621 return *rtl_Instance<
622 T, StaticInstanceWithInit,
624 Data, InitData >::create( StaticInstanceWithInit(),
629 struct StaticInstanceWithInit {
630 T * operator () ( Data d ) {
631 static T instance(d);
639 #endif // INCLUDED_RTL_INSTANCE_HXX A helper functor for the rtl_Instance template.
Definition: getglobalmutex.hxx:31
Helper class for a late-initialized static aggregate, e.g.
Definition: instance.hxx:546
Helper base class for a late-initialized (default-constructed) static variable, implementing the doub...
Definition: instance.hxx:403
Helper base class for a late-initialized static variable, implementing the double-checked locking pat...
Definition: instance.hxx:612
Guard< Mutex > MutexGuard
Definition: mutex.hxx:224
#define OSL_DOUBLE_CHECKED_LOCKING_MEMORY_BARRIER()
A platform specific macro needed to make double-checked locking work.
Definition: doublecheckedlocking.h:67
Definition: bootstrap.hxx:29
Helper base class for a late-initialized (default-constructed) static variable, implementing the doub...
Definition: instance.hxx:474