Skip to content
Snippets Groups Projects
Select Git revision
  • 4ca867750560e3a129c5cdd2afca1eaf2ce12861
  • master default protected
  • release/202005
  • release/202001
  • release/201912
  • release/201911
  • release/releaseWindowsTestOne
  • release/windowsReleaseTest
  • release/releaseTest
  • release/releaseWindowsTest
  • release/201910
  • release/qt/201910
  • release/windows-test/201910
  • release/201908
  • release/201906
  • release/201905
  • release/201904
  • release/201903
  • release/201902
  • release/201901
  • release/201812
  • 4.0.0
  • 2.2.0
  • 2.1.0
  • 2.0.1
  • 2.0.0
  • 1.4.1
  • 1.4.0
  • 1.3.0
  • 1.2.0
  • 1.1.0
31 results

SingletonHolder.hpp

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    SingletonHolder.hpp 2.16 KiB
    /*
     *    Copyright (c) <2002-2004> <Jean-Philippe Barrette-LaPierre>
     *    
     *    Permission is hereby granted, free of charge, to any person obtaining
     *    a copy of this software and associated documentation files 
     *    (cURLpp), to deal in the Software without restriction, 
     *    including without limitation the rights to use, copy, modify, merge,
     *    publish, distribute, sublicense, and/or sell copies of the Software,
     *    and to permit persons to whom the Software is furnished to do so, 
     *    subject to the following conditions:
     *    
     *    The above copyright notice and this permission notice shall be included
     *    in all copies or substantial portions of the Software.
     *    
     *    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
     *    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
     *    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 
     *    IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 
     *    CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 
     *    TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
     *    SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
     */
    
    #ifndef SINGLETON_HOLDER_HPP
    #define SINGLETON_HOLDER_HPP
    
    #include <cassert>
    
    #include "CreationUsingNew.hpp"
    #include "LifetimeDefault.hpp"
    #include "LifetimeWithLongevity.hpp"
    #include "../ThreadingSingle.hpp"
    
    namespace utilspp
    {
      template
      < class T,
        template < class > class CreationPolicy = utilspp::CreationUsingNew,
        template < class > class LifetimePolicy = utilspp::LifetimeDefault,
        template < class > class ThreadingModel = utilspp::ThreadingSingle >
      class SingletonHolder
      {
      public:
        //the accessor method.
        static T& instance();
        static void makeInstance();
        static void terminate();
             
      protected:
        //protected to be sure that nobody may create one by himself.
        SingletonHolder();
             
      private:
        static void destroySingleton();
             
      private:
        typedef typename ThreadingModel< T * >::VolatileType InstanceType;
        static InstanceType mInstance;
        static bool mDestroyed;
      };
    
    };
    
    #include "SingletonHolder.inl"
    
    #endif