2
* Copyright (c) <2002-2004> <Jean-Philippe Barrette-LaPierre>
4
* Permission is hereby granted, free of charge, to any person obtaining
5
* a copy of this software and associated documentation files
6
* (cURLpp), to deal in the Software without restriction,
7
* including without limitation the rights to use, copy, modify, merge,
8
* publish, distribute, sublicense, and/or sell copies of the Software,
9
* and to permit persons to whom the Software is furnished to do so,
10
* subject to the following conditions:
12
* The above copyright notice and this permission notice shall be included
13
* in all copies or substantial portions of the Software.
15
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
16
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
18
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
19
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
20
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
21
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24
#ifndef __SINGLETON_HOLDER_HPP__
25
#define __SINGLETON_HOLDER_HPP__
27
#include "creation_using_new.hpp"
28
#include "lifetime_default.hpp"
29
#include "../threading_single.hpp"
35
template < class > class CreationPolicy = utilspp::CreationUsingNew,
36
template < class > class LifetimePolicy = utilspp::LifetimeDefault,
37
template < class > class ThreadingModel = utilspp::ThreadingSingle >
41
//the accessor method.
43
static void makeInstance();
44
static void terminate();
47
//protected to be sure that nobody may create one by himself.
51
static void destroySingleton();
54
typedef typename ThreadingModel< T * >::VolatileType InstanceType;
55
static InstanceType mInstance;
56
static bool mDestroyed;
61
#include "singleton_holder.inl"