drop suncc support from singleton class

This commit is contained in:
Dane Springmeyer 2013-09-18 20:29:46 -07:00
parent 9aff3c596b
commit 8b5323f101

View file

@ -84,36 +84,17 @@ public:
static MaxAlign staticMemory;
return new(&staticMemory) T;
}
#ifdef __SUNPRO_CC
// Sun C++ Compiler doesn't handle `volatile` keyword same as GCC.
static void destroy(T* obj)
#else
static void destroy(volatile T* obj)
#endif
{
obj->~T();
}
};
#ifdef __GNUC__
template <typename T,
template <typename U> class CreatePolicy=CreateStatic> class MAPNIK_DECL singleton
{
#else
template <typename T,
template <typename U> class CreatePolicy=CreateStatic> class singleton
{
#endif
#ifdef __SUNPRO_CC
/* Sun's C++ compiler will issue the following errors if CreatePolicy<T> is used:
Error: A class template name was expected instead of mapnik::CreatePolicy<mapnik::T>
Error: A "friend" declaration must specify a class or function.
*/
friend class CreatePolicy;
#else
friend class CreatePolicy<T>;
#endif
static T* pInstance_;
static bool destroyed_;
singleton(const singleton &rhs);
@ -131,7 +112,8 @@ template <typename T,
destroyed_ = true;
}
protected:
protected:
#ifdef MAPNIK_THREADSAFE
static mutex mutex_;
#endif
@ -162,7 +144,8 @@ template <typename T,
}
return *pInstance_;
}
};
};
#ifdef MAPNIK_THREADSAFE
template <typename T,
template <typename U> class CreatePolicy> mutex singleton<T,CreatePolicy>::mutex_;