Singleton.hpp
#if !defined(__SINGLETON_HPP)
#define __SINGLETON_HPP
/*
CoreLinux++
Copyright (C) 1999 CoreLinux Consortium
The CoreLinux++ Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The CoreLinux++ Library Library 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
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
#if !defined(__COMMON_HPP)
#include <Common.hpp>
#endif
namespace corelinux
{
template< class TypeImpl >
class Singleton : public CoreLinuxObject
{
public:
//
// Constructors and destructor
//
Singleton( void ) throw( Assertion )
:
CoreLinuxObject()
{
REQUIRE( theSingleton == NULLPTR );
REQUIRE( theType == NULLPTR );
theSingleton = this;
theType = new TypeImpl;
}
Singleton( TypeImpl *aTypePtr ) throw( Assertion )
:
CoreLinuxObject()
{
ENSURE( aTypePtr != NULLPTR );
REQUIRE( theSingleton == NULLPTR );
REQUIRE( theType == NULLPTR );
theSingleton = this;
theType = aTypePtr;
}
virtual ~Singleton( void )
{
if( theSingleton == this )
{
theSingleton = NULLPTR;
if( theType != NULLPTR )
{
delete theType;
theType = NULLPTR;
}
else
{
; // do nothing
}
}
else
{
; // do nothing
}
}
//
// Operator overload
//
bool operator==( const Singleton & aSingleton ) const
{
return ( &aSingleton == theSingleton );
}
//
// Accessor
//
static TypeImpl * instance( void )
{
return theType;
}
private:
//
// Constructor
//
Singleton( const Singleton & ) throw( Assertion )
:
CoreLinuxObject()
{
NEVER_GET_HERE;
}
//
// Operator overload
//
Singleton & operator=( const Singleton & )
throw( Assertion )
{
NEVER_GET_HERE;
return (*this);
}
private:
static Singleton<TypeImpl> *theSingleton;
static TypeImpl *theType;
};
template< class TypeImpl >
Singleton<TypeImpl> *Singleton<TypeImpl>::theSingleton( NULLPTR );
template< class TypeImpl >
TypeImpl *Singleton<TypeImpl>::theType( NULLPTR );
}
#endif // if !defined(__SINGLETON_HPP)
/*
Common rcs information do not modify
$Author: prudhomm $
$Revision: 1.1 $
$Date: 2000/04/23 20:43:13 $
$Locker: $
*/
corelinux::Singleton::instance
static TypeImpl * instance(void)
Returns the instance of the TypeImpl.
Definition: Singleton.hpp:126
corelinux::Singleton
Ensure a class only has one instance, and provide a global point of access to it. ...
Definition: Singleton.hpp:38
corelinux::CoreLinuxObject::CoreLinuxObject
CoreLinuxObject(void)
Default Constructor.
Definition: CoreLinuxObject.cpp:31
corelinux::Singleton::Singleton
Singleton(TypeImpl *aTypePtr)
Initializing constructor.
Definition: Singleton.hpp:67
corelinux
Forward reference the various common classes.
Definition: AbstractAllocator.hpp:32
corelinux::Singleton::operator==
bool operator==(const Singleton &aSingleton) const
Equality operator tests that theSingleton instances are equal.
Definition: Singleton.hpp:112
corelinux::Singleton::Singleton
Singleton(void)
Default constructor sets theSingleton and theType after insuring that they are not already instantiat...
Definition: Singleton.hpp:54
corelinux::Assertion
Assertion is-a Exception created when an assertion fails.
Definition: Assertion.hpp:423
corelinux::Singleton::~Singleton
virtual ~Singleton(void)
Virtual destructor.
Definition: Singleton.hpp:80
corelinux::CoreLinuxObject
An CoreLinuxObject is a base class for the library.
Definition: CoreLinuxObject.hpp:39

This is the CoreLinux++ reference manual
Provided by The CoreLinux Consortium