4 #ifndef INCLUDED_RTL_INSTANCE_HXX
5 #define INCLUDED_RTL_INSTANCE_HXX
249 template<
typename Inst,
typename InstCtor,
250 typename Guard,
typename GuardCtor,
251 typename Data = int,
typename DataCtor =
int >
255 static Inst * create(InstCtor aInstCtor, GuardCtor aGuardCtor)
258 static Inst * m_pInstance = NULL;
260 Inst * p = m_pInstance;
263 Guard aGuard(aGuardCtor());
279 static Inst * create(InstCtor aInstCtor, GuardCtor aGuardCtor,
283 static Inst * m_pInstance = NULL;
285 Inst * p = m_pInstance;
288 Data aData(aDataCtor());
289 Guard aGuard(aGuardCtor());
293 p = aInstCtor(aData);
305 static Inst * create(InstCtor aInstCtor, GuardCtor aGuardCtor,
309 static Inst * m_pInstance = 0;
311 Inst * p = m_pInstance;
314 Guard aGuard(aGuardCtor());
318 p = aInstCtor(rData);
331 #if !defined _MSC_VER
332 static Inst * m_pInstance;
336 #if !defined _MSC_VER
337 template<
typename Inst,
typename InstCtor,
338 typename Guard,
typename GuardCtor,
339 typename Data,
typename DataCtor >
341 rtl_Instance< Inst, InstCtor, Guard, GuardCtor, Data, DataCtor >::m_pInstance
368 #if defined LIBO_INTERNAL_ONLY
369 template<
typename T,
typename Unique>
384 template<
typename T,
typename Unique>
394 return *rtl_Instance<
400 struct StaticInstance {
428 #if defined LIBO_INTERNAL_ONLY
429 template<
typename T,
typename Data,
typename Unique>
430 class StaticWithArg {
438 static T &
get(
const Data& rData) {
439 static T instance(rData);
449 static T &
get(Data& rData) {
450 static T instance(rData);
455 template<
typename T,
typename Data,
typename Unique>
464 static T &
get(
const Data& rData) {
465 return *rtl_Instance<
466 T, StaticInstanceWithArg,
468 Data >::create( StaticInstanceWithArg(),
479 static T &
get(Data& rData) {
480 return *rtl_Instance<
481 T, StaticInstanceWithArg,
483 Data >::create( StaticInstanceWithArg(),
488 struct StaticInstanceWithArg {
489 T * operator () (
const Data& rData) {
490 static T instance(rData);
494 T * operator () (Data& rData) {
495 static T instance(rData);
510 #if defined LIBO_INTERNAL_ONLY
511 template<
typename T,
typename InitAggregate>
512 class StaticAggregate {
522 static T *instance = InitAggregate()();
527 template<
typename T,
typename InitAggregate>
575 #if defined LIBO_INTERNAL_ONLY
576 template<
typename T,
typename InitData,
577 typename Unique = InitData,
typename Data = T>
578 class StaticWithInit {
587 static T instance = InitData()();
592 template<
typename T,
typename InitData,
593 typename Unique = InitData,
typename Data = T>
603 return *rtl_Instance<
604 T, StaticInstanceWithInit,
606 Data, InitData >::create( StaticInstanceWithInit(),
611 struct StaticInstanceWithInit {
612 T * operator () ( Data d ) {
613 static T instance(d);
621 #endif // INCLUDED_RTL_INSTANCE_HXX
#define OSL_DOUBLE_CHECKED_LOCKING_MEMORY_BARRIER()
A platform specific macro needed to make double-checked locking work.
Definition: doublecheckedlocking.h:53
A helper functor for the rtl_Instance template.
Definition: getglobalmutex.hxx:15
Guard< Mutex > MutexGuard
Definition: mutex.hxx:235
Helper base class for a late-initialized (default-constructed) static variable, implementing the doub...
Definition: instance.hxx:456
Helper base class for a late-initialized (default-constructed) static variable, implementing the doub...
Definition: instance.hxx:385
Helper class for a late-initialized static aggregate, e.g.
Definition: instance.hxx:528
Helper base class for a late-initialized static variable, implementing the double-checked locking pat...
Definition: instance.hxx:594