29 #if !defined INCLUDED_RTL_INSTANCE_HXX
30 #define INCLUDED_RTL_INSTANCE_HXX
270 template<
typename Inst,
typename InstCtor,
271 typename Guard,
typename GuardCtor,
272 typename Data = int,
typename DataCtor =
int >
276 static inline Inst * create(InstCtor aInstCtor, GuardCtor aGuardCtor)
279 static Inst * m_pInstance = 0;
281 Inst * p = m_pInstance;
284 Guard aGuard(aGuardCtor());
300 static inline Inst * create(InstCtor aInstCtor, GuardCtor aGuardCtor,
304 static Inst * m_pInstance = 0;
306 Inst * p = m_pInstance;
309 Data aData(aDataCtor());
310 Guard aGuard(aGuardCtor());
314 p = aInstCtor(aData);
326 static inline Inst * create(InstCtor aInstCtor, GuardCtor aGuardCtor,
330 static Inst * m_pInstance = 0;
332 Inst * p = m_pInstance;
335 Guard aGuard(aGuardCtor());
339 p = aInstCtor(rData);
352 #if !defined _MSC_VER
353 static Inst * m_pInstance;
357 #if !defined _MSC_VER
358 template<
typename Inst,
typename InstCtor,
359 typename Guard,
typename GuardCtor,
360 typename Data,
typename DataCtor >
362 rtl_Instance< Inst, InstCtor, Guard, GuardCtor, Data, DataCtor >::m_pInstance
389 #if defined HAVE_THREADSAFE_STATICS
390 template<
typename T,
typename Unique>
405 template<
typename T,
typename Unique>
415 return *rtl_Instance<
421 struct StaticInstance {
449 #if defined HAVE_THREADSAFE_STATICS
450 template<
typename T,
typename Data,
typename Unique>
451 class StaticWithArg {
459 static T &
get(
const Data& rData) {
460 static T instance(rData);
470 static T &
get(Data& rData) {
471 static T instance(rData);
476 template<
typename T,
typename Data,
typename Unique>
485 static T &
get(
const Data& rData) {
486 return *rtl_Instance<
487 T, StaticInstanceWithArg,
489 Data >::create( StaticInstanceWithArg(),
500 static T &
get(Data& rData) {
501 return *rtl_Instance<
502 T, StaticInstanceWithArg,
504 Data >::create( StaticInstanceWithArg(),
509 struct StaticInstanceWithArg {
510 T * operator () (
const Data& rData) {
511 static T instance(rData);
515 T * operator () (Data& rData) {
516 static T instance(rData);
531 #if defined HAVE_THREADSAFE_STATICS
532 template<
typename T,
typename InitAggregate>
533 class StaticAggregate {
543 static T *instance = InitAggregate()();
548 template<
typename T,
typename InitAggregate>
596 #if defined HAVE_THREADSAFE_STATICS
597 template<
typename T,
typename InitData,
598 typename Unique = InitData,
typename Data = T>
599 class StaticWithInit {
608 static T instance = InitData()();
613 template<
typename T,
typename InitData,
614 typename Unique = InitData,
typename Data = T>
624 return *rtl_Instance<
625 T, StaticInstanceWithInit,
627 Data, InitData >::create( StaticInstanceWithInit(),
632 struct StaticInstanceWithInit {
633 T * operator () ( Data d ) {
634 static T instance(d);
642 #endif // INCLUDED_RTL_INSTANCE_HXX