AbstractAllocator.hpp
#if !defined(__ABSTRACTALLOCATOR_HPP)
#define __ABSTRACTALLOCATOR_HPP
/*
CoreLinux++
Copyright (C) 1999,2000 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
#if !defined(__ALLOCATOR_HPP)
#include <Allocator.hpp>
#endif
namespace corelinux
{
template< class TypeImpl >
class AbstractAllocator : public Allocator
{
public:
//
// Constructors and destructor
//
AbstractAllocator( void )
:
Allocator( )
{
; // do nothing
}
AbstractAllocator
(
const AbstractAllocator & aRef
)
:
Allocator( aRef )
{
; // do nothing
}
virtual ~AbstractAllocator( void )
{
; // do nothing
}
//
// Operator overloads
//
AbstractAllocator & operator=
(
const AbstractAllocator & aRef
)
{
Allocator::operator=(aRef);
return (*this);
}
bool operator==( const AbstractAllocator & aRef ) const
{
return Allocator::operator==(aRef);
}
//
// Factory methods
//
TypeImpl *createType( void )
{
TypeImpl *aPtr( NULLPTR );
try
{
aPtr = allocateObject();
incrementAllocates();
}
catch( ... )
{
decrementAllocates();
throw;
}
return aPtr;
}
void destroyType( TypeImpl *aPtr )
{
try
{
deallocateObject( aPtr );
incrementDeallocates();
}
catch( ... )
{
decrementDeallocates();
throw;
}
}
protected:
//
// Factory virtual declarations
//
virtual TypeImpl *allocateObject( void ) = 0;
virtual void deallocateObject( TypeImpl * ) = 0;
};
}
#define CORELINUX_DEFAULT_ALLOCATOR( nameTag, typeTag ) \
class nameTag : public CORELINUX(AbstractAllocator<typeTag>) \
{ \
public: \
nameTag( void ) \
: \
CORELINUX(AbstractAllocator<typeTag>)()\
{ \
; \
} \
\
virtual ~nameTag( void ) \
{ \
; \
} \
protected: \
\
\
virtual typeTag *allocateObject( void ) \
{ \
return ::new typeTag; \
} \
\
virtual void deallocateObject( typeTag *aPtr ) \
{ \
::delete aPtr; \
} \
}; \
typedef nameTag * nameTag ## Ptr; \
typedef const nameTag * nameTag ## Cptr; \
typedef nameTag & nameTag ## Ref; \
typedef const nameTag & nameTag ## Cref;
#endif // if !defined(__ABSTRACTALLOCATOR_HPP)
/*
Common rcs information do not modify
$Author: prudhomm $
$Revision: 1.2 $
$Date: 2001/02/15 16:34:05 $
$Locker: $
*/
corelinux::Allocator::operator=
Allocator & operator=(AllocatorCref)
Assingment operator overload.
Definition: Allocator.cpp:72
corelinux::AbstractAllocator::operator==
bool operator==(const AbstractAllocator &aRef) const
Equality operator overload.
Definition: AbstractAllocator.hpp:108
corelinux::AbstractAllocator
AbstractAllocator is a abstract template which provides for the extension of memory managment on a Ty...
Definition: AbstractAllocator.hpp:44
corelinux::Allocator::incrementDeallocates
virtual void incrementDeallocates(void)
Increment the deallocates.
Definition: Allocator.cpp:122
corelinux::Allocator::incrementAllocates
virtual void incrementAllocates(void)
Increment the allocates.
Definition: Allocator.cpp:117
corelinux::AbstractAllocator::destroyType
void destroyType(TypeImpl *aPtr)
Destroy type will invoke the deallocateObject method of the derivation and will increment the number ...
Definition: AbstractAllocator.hpp:154
corelinux::Allocator::decrementAllocates
virtual void decrementAllocates(void)
Decrement the allocates.
Definition: Allocator.cpp:127
corelinux
Forward reference the various common classes.
Definition: AbstractAllocator.hpp:32
corelinux::AbstractAllocator::AbstractAllocator
AbstractAllocator(void)
Default constructor.
Definition: AbstractAllocator.hpp:54
corelinux::Allocator
Allocator is a Strategy class used by AbstractAllocator and AbstractFactory.Each Allocator instance t...
Definition: Allocator.hpp:43
corelinux::AbstractAllocator::~AbstractAllocator
virtual ~AbstractAllocator(void)
Virtual destructor.
Definition: AbstractAllocator.hpp:78
corelinux::Allocator::decrementDeallocates
virtual void decrementDeallocates(void)
Decrement the deallocates.
Definition: Allocator.cpp:132
corelinux::AbstractAllocator::allocateObject
virtual TypeImpl * allocateObject(void)=0
allocates a object in the subclass
corelinux::AbstractAllocator::deallocateObject
virtual void deallocateObject(TypeImpl *)=0
de-allocates a object in the subclass
corelinux::Allocator::operator==
bool operator==(AllocatorCref) const
Equality operator overload.
Definition: Allocator.cpp:90
corelinux::AbstractAllocator::createType
TypeImpl * createType(void)
Create type will invoke the allocateObject method of the derivation and will increment the number of ...
Definition: AbstractAllocator.hpp:128
corelinux::Allocator::Allocator
Allocator(void)
Default constructor.
Definition: Allocator.cpp:37

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