20 #ifndef INCLUDED_RTL_INSTANCE_HXX 21 #define INCLUDED_RTL_INSTANCE_HXX 265 template<
typename Inst,
typename InstCtor,
266 typename Guard,
typename GuardCtor,
267 typename Data = int,
typename DataCtor =
int >
271 static Inst * create(InstCtor aInstCtor, GuardCtor aGuardCtor)
274 static Inst * m_pInstance = 0;
276 Inst * p = m_pInstance;
279 Guard aGuard(aGuardCtor());
295 static Inst * create(InstCtor aInstCtor, GuardCtor aGuardCtor,
299 static Inst * m_pInstance = 0;
301 Inst * p = m_pInstance;
304 Data aData(aDataCtor());
305 Guard aGuard(aGuardCtor());
309 p = aInstCtor(aData);
321 static Inst * create(InstCtor aInstCtor, GuardCtor aGuardCtor,
325 static Inst * m_pInstance = 0;
327 Inst * p = m_pInstance;
330 Guard aGuard(aGuardCtor());
334 p = aInstCtor(rData);
347 #if !defined _MSC_VER 348 static Inst * m_pInstance;
352 #if !defined _MSC_VER 353 template<
typename Inst,
typename InstCtor,
354 typename Guard,
typename GuardCtor,
355 typename Data,
typename DataCtor >
357 rtl_Instance< Inst, InstCtor, Guard, GuardCtor, Data, DataCtor >::m_pInstance
384 #if defined LIBO_INTERNAL_ONLY 385 template<
typename T,
typename Unique>
400 template<
typename T,
typename Unique>
410 return *rtl_Instance<
416 struct StaticInstance {
444 #if defined LIBO_INTERNAL_ONLY 445 template<
typename T,
typename Data,
typename Unique>
446 class StaticWithArg {
454 static T &
get(
const Data& rData) {
455 static T instance(rData);
465 static T &
get(Data& rData) {
466 static T instance(rData);
471 template<
typename T,
typename Data,
typename Unique>
480 static T &
get(
const Data& rData) {
481 return *rtl_Instance<
482 T, StaticInstanceWithArg,
484 Data >::create( StaticInstanceWithArg(),
495 static T &
get(Data& rData) {
496 return *rtl_Instance<
497 T, StaticInstanceWithArg,
499 Data >::create( StaticInstanceWithArg(),
504 struct StaticInstanceWithArg {
505 T * operator () (
const Data& rData) {
506 static T instance(rData);
510 T * operator () (Data& rData) {
511 static T instance(rData);
526 #if defined LIBO_INTERNAL_ONLY 527 template<
typename T,
typename InitAggregate>
528 class StaticAggregate {
538 static T *instance = InitAggregate()();
543 template<
typename T,
typename InitAggregate>
591 #if defined LIBO_INTERNAL_ONLY 592 template<
typename T,
typename InitData,
593 typename Unique = InitData,
typename Data = T>
594 class StaticWithInit {
603 static T instance = InitData()();
608 template<
typename T,
typename InitData,
609 typename Unique = InitData,
typename Data = T>
619 return *rtl_Instance<
620 T, StaticInstanceWithInit,
622 Data, InitData >::create( StaticInstanceWithInit(),
627 struct StaticInstanceWithInit {
628 T * operator () ( Data d ) {
629 static T instance(d);
637 #endif // INCLUDED_RTL_INSTANCE_HXX Helper base class for a late-initialized (default-constructed) static variable, implementing the doub...
Definition: instance.hxx:401
#define OSL_DOUBLE_CHECKED_LOCKING_MEMORY_BARRIER()
A platform specific macro needed to make double-checked locking work.
Definition: doublecheckedlocking.h:69
Helper base class for a late-initialized static variable, implementing the double-checked locking pat...
Definition: instance.hxx:610
Helper base class for a late-initialized (default-constructed) static variable, implementing the doub...
Definition: instance.hxx:472
Guard< Mutex > MutexGuard
Definition: mutex.hxx:246
Helper class for a late-initialized static aggregate, e.g.
Definition: instance.hxx:544
A helper functor for the rtl_Instance template.
Definition: getglobalmutex.hxx:31
Definition: bootstrap.hxx:29