Introduced CPlusPlus::Managed.

Managed is an helper base class that simplify the usage of memory pools.
This commit is contained in:
Roberto Raggi
2008-12-22 13:09:26 +01:00
parent 753ddb7ce0
commit ae4725e954
4 changed files with 32 additions and 15 deletions

View File

@@ -381,15 +381,6 @@ UsingDirectiveAST *AST::asUsingDirective()
WhileStatementAST *AST::asWhileStatement()
{ return dynamic_cast<WhileStatementAST *>(this); }
void *AST::operator new(size_t size, MemoryPool *pool)
{ return pool->allocate(size); }
void AST::operator delete(void *)
{ }
void AST::operator delete(void *, MemoryPool *)
{ }
void AST::accept(ASTVisitor *visitor)
{
if (visitor->preVisit(this))

View File

@@ -55,12 +55,12 @@
#include "CPlusPlusForwardDeclarations.h"
#include "ASTfwd.h"
#include <new>
#include "MemoryPool.h"
CPLUSPLUS_BEGIN_HEADER
CPLUSPLUS_BEGIN_NAMESPACE
class CPLUSPLUS_EXPORT AST
class CPLUSPLUS_EXPORT AST: public Managed
{
AST(const AST &other);
void operator =(const AST &other);
@@ -74,10 +74,6 @@ public:
static void accept(AST *ast, ASTVisitor *visitor)
{ if (ast) ast->accept(visitor); }
void *operator new(size_t size, MemoryPool *pool);
void operator delete(void *);
void operator delete(void *, MemoryPool *);
virtual unsigned firstToken() const = 0;
virtual unsigned lastToken() const = 0;

View File

@@ -112,4 +112,19 @@ void *MemoryPool::allocate_helper(size_t size)
return addr;
}
Managed::Managed()
{ }
Managed::~Managed()
{ }
void *Managed::operator new(size_t size, MemoryPool *pool)
{ return pool->allocate(size); }
void Managed::operator delete(void *)
{ }
void Managed::operator delete(void *, MemoryPool *)
{ }
CPLUSPLUS_END_NAMESPACE

View File

@@ -55,6 +55,7 @@
#include "CPlusPlusForwardDeclarations.h"
#include <cstddef>
#include <new>
CPLUSPLUS_BEGIN_HEADER
CPLUSPLUS_BEGIN_NAMESPACE
@@ -99,6 +100,20 @@ private:
};
};
class CPLUSPLUS_EXPORT Managed
{
Managed(const Managed &other);
void operator = (const Managed &other);
public:
Managed();
virtual ~Managed();
void *operator new(size_t size, MemoryPool *pool);
void operator delete(void *);
void operator delete(void *, MemoryPool *);
};
CPLUSPLUS_END_NAMESPACE
CPLUSPLUS_END_HEADER