panthema / 2006 / SDIOS06 / sdios06 / testapps / stltest / new (Download File)
//
// $Id$
//
// Description: Support for C++ new and delete
//
//
// Author: Ulf Vatter <uvatter@ira.uka.de>, (C) 2004
//
// Copyright: See COPYING file that comes with this distribution
//
//
#ifndef NEW_H_
#define NEW_H_

#define __need_size_t
#define __need_NULL
#include <stddef.h>
#include <stdlib.h>

#include <l4/kdebug.h>

// Very, very simple new and delete
// C++-Standart say, that new never returns 0, but throws an exeption
// We simulate this via an L4_KDB_Enter

extern inline void* operator new (size_t size)
{
	void* foo=malloc(size);
	if(foo == NULL)
		L4_KDB_Enter("new: Out of memory");
	return foo;
}

extern inline void* operator new[] (size_t size)
{
	void* foo=malloc(size);
	if (foo == NULL)
		L4_KDB_Enter("new: Out of memory");
	return foo;
}

extern inline void operator delete (void * p)
{
	free(p);
}

extern inline void operator delete[] (void * p)
{
	free(p);
}

// The placement new is for manually triggering the constructor
extern inline void* operator new (size_t size, void* placement)
{
	(void) size;
	return placement;
}

extern inline void* operator new[] (size_t size, void* placement)
{
	(void) size;
	return placement;
}

// actually, these doesn't really make sense to call. Use obj->~obj() instead
extern inline void operator delete (void *, void*)
{
}

extern inline void operator delete[] (void *, void*)
{
}

#endif