19720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* 29720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1999 39720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Boris Fomitchev 49720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 59720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * This material is provided "as is", with absolutely no warranty expressed 69720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * or implied. Any use is at your own risk. 79720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 89720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to use or copy this software for any purpose is hereby granted 99720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * without fee, provided the above notices are retained on all copies. 109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to modify the code and to distribute modified code is granted, 119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * provided the above notices are retained, and a notice that the code was 129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * modified is included with the above copyright notice. 139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */ 159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_NEW 179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_INTERNAL_NEW 189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_CSTDDEF 209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// size_t 219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_cstddef.h> 229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 24e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (__BORLANDC__) && (__BORLANDC__ < 0x570) 259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// new.h uses ::malloc ;( 269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include _STLP_NATIVE_CPP_C_HEADER(cstdlib) 279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockusing _STLP_VENDOR_CSTD::malloc; 289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_NO_NEW_NEW_HEADER) 319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// eMbedded Visual C++ .NET unfortunately uses _INC_NEW for both <new.h> and <new> 329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// we undefine the symbol to get the stuff in the SDK's <new> 339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if defined (_STLP_WCE_NET) && defined (_INC_NEW) 349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# undef _INC_NEW 359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if defined (new) 389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* STLport cannot replace native Std library new header if new is a macro, 399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * please define new macro after <new> header inclusion. 409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */ 419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# error Cannot include native new header as new is a macro. 429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 44e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (_STLP_HAS_INCLUDE_NEXT) 45e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# include_next <new> 46e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# else 47e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# include _STLP_NATIVE_CPP_RUNTIME_HEADER(new) 489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else 509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <new.h> 519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_NO_BAD_ALLOC) && !defined (_STLP_NEW_DONT_THROW_BAD_ALLOC) 549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define _STLP_NEW_DONT_THROW_BAD_ALLOC 1 559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_USE_EXCEPTIONS) && defined (_STLP_NEW_DONT_THROW_BAD_ALLOC) 589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# ifndef _STLP_INTERNAL_EXCEPTION 609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_exception.h> 619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_BEGIN_NAMESPACE 649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if defined (_STLP_NO_BAD_ALLOC) 669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct nothrow_t {}; 679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define nothrow nothrow_t() 689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* 719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * STLport own bad_alloc exception to be used if the native C++ library 729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * do not define it or when the new operator do not throw it to avoid 739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * a useless library dependency. 749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */ 759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass bad_alloc : public exception { 769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: 779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block bad_alloc () _STLP_NOTHROW_INHERENTLY { } 789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block bad_alloc(const bad_alloc&) _STLP_NOTHROW_INHERENTLY { } 799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block bad_alloc& operator=(const bad_alloc&) _STLP_NOTHROW_INHERENTLY {return *this;} 809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ~bad_alloc () _STLP_NOTHROW_INHERENTLY { } 819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const char* what() const _STLP_NOTHROW_INHERENTLY { return "bad alloc"; } 829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_END_NAMESPACE 859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_USE_EXCEPTIONS && (_STLP_NO_BAD_ALLOC || _STLP_NEW_DONT_THROW_BAD_ALLOC) */ 879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 88e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (_STLP_USE_OWN_NAMESPACE) 899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_BEGIN_NAMESPACE 919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 92e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if !defined (_STLP_NEW_DONT_THROW_BAD_ALLOC) 939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockusing _STLP_VENDOR_EXCEPT_STD::bad_alloc; 94e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 96e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if !defined (_STLP_NO_BAD_ALLOC) 979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockusing _STLP_VENDOR_EXCEPT_STD::nothrow_t; 989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockusing _STLP_VENDOR_EXCEPT_STD::nothrow; 99e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (_STLP_GLOBAL_NEW_HANDLER) 1009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockusing ::new_handler; 1019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockusing ::set_new_handler; 102e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# else 1039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockusing _STLP_VENDOR_EXCEPT_STD::new_handler; 1049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockusing _STLP_VENDOR_EXCEPT_STD::set_new_handler; 105e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 106e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif /* !_STLP_NO_BAD_ALLOC */ 1079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_END_NAMESPACE 109e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif /* _STLP_USE_OWN_NAMESPACE */ 1109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 111e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_THROW_BAD_ALLOC 112e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if !defined (_STLP_USE_EXCEPTIONS) 113e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# ifndef _STLP_INTERNAL_CSTDIO 114e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# include <stl/_cstdio.h> 115e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 116ec42173ef0955aa1844e0be303363c7e5dc98fb7James Dong# define _STLP_THROW_BAD_ALLOC puts("out of memory\n"); abort() 1179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# else 118e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_THROW_BAD_ALLOC _STLP_THROW(_STLP_STD::bad_alloc()) 1199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 120e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 121e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 122e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (_STLP_NO_NEW_NEW_HEADER) || defined (_STLP_NEW_DONT_THROW_BAD_ALLOC) 123e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_CHECK_NULL_ALLOC(__x) void* __y = __x; if (__y == 0) { _STLP_THROW_BAD_ALLOC; } return __y 124e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#else 125e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_CHECK_NULL_ALLOC(__x) return __x 126e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 1279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_BEGIN_NAMESPACE 1299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 130e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if ((defined (__IBMCPP__) || defined (__OS400__) || defined (__xlC__) || defined (qTidyHeap)) && defined (_STLP_DEBUG_ALLOC)) 131e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottinline void* _STLP_CALL __stl_new(size_t __n) { _STLP_CHECK_NULL_ALLOC(::operator new(__n, __FILE__, __LINE__)); } 1329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline void _STLP_CALL __stl_delete(void* __p) { ::operator delete(__p, __FILE__, __LINE__); } 133e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#else 134e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottinline void* _STLP_CALL __stl_new(size_t __n) { _STLP_CHECK_NULL_ALLOC(::operator new(__n)); } 1359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline void _STLP_CALL __stl_delete(void* __p) { ::operator delete(__p); } 136e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 1379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_END_NAMESPACE 1389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_INTERNAL_NEW */ 1409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* 1429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Local Variables: 1439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * mode:C++ 1449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * End: 1459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */ 146