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);
#define OSL_DOUBLE_CHECKED_LOCKING_MEMORY_BARRIER()
A platform specific macro needed to make double-checked locking work.
Definition: doublecheckedlocking.h:69
Guard< Mutex > MutexGuard
Definition: mutex.hxx:246
Definition: bootstrap.hxx:30
Helper base class for a late-initialized (default-constructed) static variable, implementing the doub...
Definition: instance.hxx:401
static T & get()
Gets the static.
Definition: instance.hxx:409
Helper base class for a late-initialized (default-constructed) static variable, implementing the doub...
Definition: instance.hxx:472
static T & get(Data &rData)
Gets the static.
Definition: instance.hxx:495
static T & get(const Data &rData)
Gets the static.
Definition: instance.hxx:480
Helper class for a late-initialized static aggregate, e.g.
Definition: instance.hxx:544
static T * get()
Gets the static aggregate, late-initializing.
Definition: instance.hxx:552
Helper base class for a late-initialized static variable, implementing the double-checked locking pat...
Definition: instance.hxx:610
static T & get()
Gets the static.
Definition: instance.hxx:618
A helper functor for the rtl_Instance template.
Definition: getglobalmutex.hxx:32