20 #ifndef INCLUDED_RTL_INSTANCE_HXX
21 #define INCLUDED_RTL_INSTANCE_HXX
261 template<
typename Inst,
typename InstCtor,
262 typename Guard,
typename GuardCtor,
263 typename Data = int,
typename DataCtor =
int >
267 static inline Inst * create(InstCtor aInstCtor, GuardCtor aGuardCtor)
270 static Inst * m_pInstance = 0;
272 Inst * p = m_pInstance;
275 Guard aGuard(aGuardCtor());
291 static inline Inst * create(InstCtor aInstCtor, GuardCtor aGuardCtor,
295 static Inst * m_pInstance = 0;
297 Inst * p = m_pInstance;
300 Data aData(aDataCtor());
301 Guard aGuard(aGuardCtor());
305 p = aInstCtor(aData);
317 static inline Inst * create(InstCtor aInstCtor, GuardCtor aGuardCtor,
321 static Inst * m_pInstance = 0;
323 Inst * p = m_pInstance;
326 Guard aGuard(aGuardCtor());
330 p = aInstCtor(rData);
343 #if !defined _MSC_VER
344 static Inst * m_pInstance;
348 #if !defined _MSC_VER
349 template<
typename Inst,
typename InstCtor,
350 typename Guard,
typename GuardCtor,
351 typename Data,
typename DataCtor >
353 rtl_Instance< Inst, InstCtor, Guard, GuardCtor, Data, DataCtor >::m_pInstance
380 #if defined HAVE_THREADSAFE_STATICS
381 template<
typename T,
typename Unique>
396 template<
typename T,
typename Unique>
406 return *rtl_Instance<
412 struct StaticInstance {
440 #if defined HAVE_THREADSAFE_STATICS
441 template<
typename T,
typename Data,
typename Unique>
442 class StaticWithArg {
450 static T &
get(
const Data& rData) {
451 static T instance(rData);
461 static T &
get(Data& rData) {
462 static T instance(rData);
467 template<
typename T,
typename Data,
typename Unique>
476 static T &
get(
const Data& rData) {
477 return *rtl_Instance<
478 T, StaticInstanceWithArg,
480 Data >::create( StaticInstanceWithArg(),
491 static T &
get(Data& rData) {
492 return *rtl_Instance<
493 T, StaticInstanceWithArg,
495 Data >::create( StaticInstanceWithArg(),
500 struct StaticInstanceWithArg {
501 T * operator () (
const Data& rData) {
502 static T instance(rData);
506 T * operator () (Data& rData) {
507 static T instance(rData);
522 #if defined HAVE_THREADSAFE_STATICS
523 template<
typename T,
typename InitAggregate>
524 class StaticAggregate {
534 static T *instance = InitAggregate()();
539 template<
typename T,
typename InitAggregate>
587 #if defined HAVE_THREADSAFE_STATICS
588 template<
typename T,
typename InitData,
589 typename Unique = InitData,
typename Data = T>
590 class StaticWithInit {
599 static T instance = InitData()();
604 template<
typename T,
typename InitData,
605 typename Unique = InitData,
typename Data = T>
615 return *rtl_Instance<
616 T, StaticInstanceWithInit,
618 Data, InitData >::create( StaticInstanceWithInit(),
623 struct StaticInstanceWithInit {
624 T * operator () ( Data d ) {
625 static T instance(d);
633 #endif // INCLUDED_RTL_INSTANCE_HXX