diff -r b0dd75e285d2 -r 0954f5dd2cd0 browsercore/core/singleton.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browsercore/core/singleton.h Tue Jun 29 00:46:29 2010 -0400 @@ -0,0 +1,67 @@ +/* +* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, version 2.1 of the License. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, +* see "http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html/". +* +* Description: +* This defines both Meyers Singleton and Gamma Singleton template. +*/ + + +#ifndef __SINGLETON_H +#define __SINGLETON_H + +/* + * This is how a Gamma Singleton would instantiate its object. + */ +template struct CreateGamma { + static T* Create() { return new T; } +}; + +/* + * This is how a Meyers Singleton would instantiate its object. + */ +template struct CreateMeyers { + static T* Create() { + static T _instance; + return &_instance; + } +}; + +/* + * This Singleton class accepts different creation policies. + */ +template class CreationPolicy=CreateMeyers> +class Singleton { +public: + static T& Instance() { + if (!m_pInstance) + m_pInstance=CreationPolicy::Create(); + return *m_pInstance; +} + +private: + Singleton(); // hide constrcutor + ~Singleton(); // hide desctructor + Singleton(Singleton const&); // hide copy constructor + Singleton& operator=(Singleton const&); // hide assignment operator + + static T* m_pInstance; +}; + +template class C> +T* Singleton::m_pInstance=0; + +#endif // __SINGLETON_H \ No newline at end of file