williamr@4: /* williamr@4: * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(- * * ies). williamr@4: * All rights reserved. williamr@4: * This component and the accompanying materials are made available williamr@4: * under the terms of the License "Eclipse Public License v1.0" williamr@4: * which accompanies this distribution, and is available williamr@4: * at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@4: * williamr@4: * Initial Contributors: williamr@4: * Nokia Corporation - initial contribution. williamr@4: * williamr@4: * Contributors: williamr@4: * williamr@4: * Description: williamr@4: * Name : new williamr@4: * Part of : standard c++ library. williamr@4: * williamr@4: */ williamr@4: williamr@4: williamr@4: #ifndef _SYMCPP_NEW_H_ williamr@4: #define _SYMCPP_NEW_H_ williamr@4: williamr@4: williamr@4: #ifndef _STLP_FEATURES_H williamr@4: # include williamr@4: #endif williamr@4: williamr@4: williamr@4: williamr@4: # ifdef __EABI__ williamr@4: # include //Include the STLP internal header to make macros/typedefs expected of available. williamr@4: # define _STLP_CSTDDEF //Define this macro so that doesn't get included by new_eabi.h williamr@4: williamr@4: #include "exception" williamr@4: williamr@4: namespace std williamr@4: { williamr@4: typedef unsigned size_t; williamr@4: williamr@4: class bad_alloc : public exception williamr@4: { williamr@4: public: williamr@4: IMPORT_C bad_alloc() __NO_THROW; williamr@4: IMPORT_C bad_alloc(const bad_alloc&) __NO_THROW; williamr@4: IMPORT_C bad_alloc& operator=(const bad_alloc&) __NO_THROW; // { return *this;} williamr@4: williamr@4: IMPORT_C virtual ~bad_alloc() __NO_THROW; // {} williamr@4: IMPORT_C virtual const char* what() const __NO_THROW; // { return "bad_alloc";} williamr@4: }; williamr@4: williamr@4: struct nothrow_t {}; williamr@4: extern const nothrow_t nothrow; williamr@4: williamr@4: typedef void (*new_handler)(); williamr@4: williamr@4: IMPORT_C new_handler set_new_handler(new_handler) __NO_THROW; williamr@4: } williamr@4: williamr@4: // Single-object form williamr@4: williamr@4: IMPORT_C void* operator new(std::size_t) __THROW(std::bad_alloc); williamr@4: IMPORT_C void operator delete(void*) __NO_THROW; williamr@4: williamr@4: IMPORT_C void* operator new(std::size_t, const std::nothrow_t&) __NO_THROW; williamr@4: IMPORT_C void operator delete(void*, const std::nothrow_t&) __NO_THROW; williamr@4: williamr@4: #ifndef __PLACEMENT_NEW_INLINE williamr@4: #define __PLACEMENT_NEW_INLINE williamr@4: inline void* operator new(std::size_t, void* p) __NO_THROW williamr@4: { williamr@4: return p; williamr@4: } williamr@4: williamr@4: inline void operator delete(void*, void*) __NO_THROW williamr@4: { williamr@4: } williamr@4: #endif williamr@4: williamr@4: // Array form williamr@4: williamr@4: IMPORT_C void* operator new[](std::size_t) __THROW(std::bad_alloc); williamr@4: IMPORT_C void operator delete[](void*) __NO_THROW; williamr@4: williamr@4: IMPORT_C void* operator new[](std::size_t, const std::nothrow_t&) __NO_THROW; williamr@4: IMPORT_C void operator delete[](void*, const std::nothrow_t&) __NO_THROW; williamr@4: williamr@4: #ifndef __PLACEMENT_VEC_NEW_INLINE williamr@4: #define __PLACEMENT_VEC_NEW_INLINE williamr@4: inline void* operator new[](std::size_t, void* p) __NO_THROW williamr@4: { williamr@4: return p; williamr@4: } williamr@4: williamr@4: inline void operator delete[](void*, void*) __NO_THROW williamr@4: { williamr@4: } williamr@4: #endif williamr@4: williamr@4: // Symbian additions (not part of standard C++). williamr@4: IMPORT_C void* operator new(std::size_t, std::size_t) __NO_THROW; williamr@4: IMPORT_C void operator delete(void*, std::size_t) __NO_THROW; williamr@4: williamr@4: williamr@4: williamr@4: williamr@4: williamr@4: # else williamr@4: # include williamr@4: # include williamr@4: # include williamr@4: namespace std { williamr@4: williamr@4: struct nothrow_t { }; williamr@4: extern const nothrow_t nothrow; williamr@4: williamr@4: class bad_alloc : public exception { williamr@4: public : williamr@4: bad_alloc () __NO_THROW {}; williamr@4: bad_alloc ( const bad_alloc &) __NO_THROW {}; williamr@4: bad_alloc & operator =( const bad_alloc &) __NO_THROW { return *this;} williamr@4: virtual const char * what () const __NO_THROW { return "bad_alloc";} williamr@4: }; williamr@4: williamr@4: typedef void (* new_handler )(); williamr@4: new_handler set_new_handler ( new_handler new_p ) __NO_THROW; williamr@4: } williamr@4: williamr@4: IMPORT_C void* operator new (std::size_t) __THROW(std::bad_alloc); williamr@4: IMPORT_C void operator delete (void*) __NO_THROW; williamr@4: williamr@4: IMPORT_C void* operator new (std::size_t, const std::nothrow_t&) __NO_THROW; williamr@4: IMPORT_C void operator delete (void*, const std::nothrow_t&) __NO_THROW; williamr@4: williamr@4: IMPORT_C void* operator new[] (std::size_t) __THROW(std::bad_alloc); williamr@4: IMPORT_C void operator delete[] (void*) __NO_THROW; williamr@4: williamr@4: IMPORT_C void* operator new[] (std::size_t, const std::nothrow_t&) __NO_THROW; williamr@4: IMPORT_C void operator delete[] (void*, const std::nothrow_t&) __NO_THROW; williamr@4: williamr@4: # ifndef __PLACEMENT_NEW_INLINE williamr@4: # define __PLACEMENT_NEW_INLINE williamr@4: inline void* operator new(std::size_t, void* aBase) __NO_THROW williamr@4: {return aBase;} williamr@4: williamr@4: inline void operator delete(void*, void*) __NO_THROW {} williamr@4: # endif //__PLACEMENT_NEW_INLINE williamr@4: williamr@4: # ifndef __PLACEMENT_VEC_NEW_INLINE williamr@4: # define __PLACEMENT_VEC_NEW_INLINE williamr@4: inline void* operator new[](std::size_t, void* aBase) __NO_THROW williamr@4: {return aBase;} williamr@4: williamr@4: inline void operator delete[](void* , void*) __NO_THROW {} williamr@4: # endif //__PLACEMENT_VEC_NEW_INLINE williamr@4: williamr@4: # endif //__EABI__ williamr@4: #endif //_SYMCPP_NEW_H_