177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner/* 277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Copyright (c) 1999 377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Boris Fomitchev 477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * 577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * This material is provided "as is", with absolutely no warranty expressed 677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * or implied. Any use is at your own risk. 777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * 877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Permission to use or copy this software for any purpose is hereby granted 977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * without fee, provided the above notices are retained on all copies. 1077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Permission to modify the code and to distribute modified code is granted, 1177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * provided the above notices are retained, and a notice that the code was 1277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * modified is included with the above copyright notice. 1377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * 1477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner */ 1577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 1677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_INTERNAL_NEW 1777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#define _STLP_INTERNAL_NEW 1877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 1977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_INTERNAL_CSTDDEF 2077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// size_t 2177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# include <stl/_cstddef.h> 2277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 2377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 2477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (__BORLANDC__) && (__BORLANDC__ < 0x570) 2577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// new.h uses ::malloc ;( 2677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# include _STLP_NATIVE_CPP_C_HEADER(cstdlib) 2777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerusing _STLP_VENDOR_CSTD::malloc; 2877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 2977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 3077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (_STLP_NO_NEW_NEW_HEADER) 3177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// eMbedded Visual C++ .NET unfortunately uses _INC_NEW for both <new.h> and <new> 3277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// we undefine the symbol to get the stuff in the SDK's <new> 3377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if defined (_STLP_WCE_NET) && defined (_INC_NEW) 3477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# undef _INC_NEW 3577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 3677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 3777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if defined (new) 3877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner/* STLport cannot replace native Std library new header if new is a macro, 3977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * please define new macro after <new> header inclusion. 4077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner */ 4177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# error Cannot include native new header as new is a macro. 4277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 4377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 4477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if defined (_STLP_HAS_INCLUDE_NEXT) 4577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# include_next <new> 4677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# else 4777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# include _STLP_NATIVE_CPP_RUNTIME_HEADER(new) 4877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 4977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#else 5077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# include <new.h> 5177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 5277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 5377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_NO_BAD_ALLOC) && !defined (_STLP_NEW_DONT_THROW_BAD_ALLOC) 5477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# define _STLP_NEW_DONT_THROW_BAD_ALLOC 1 5577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 5677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 5777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_USE_EXCEPTIONS) && defined (_STLP_NEW_DONT_THROW_BAD_ALLOC) 5877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 5977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# ifndef _STLP_INTERNAL_EXCEPTION 6077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# include <stl/_exception.h> 6177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 6277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 6377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_BEGIN_NAMESPACE 6477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 6577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if defined (_STLP_NO_BAD_ALLOC) 6677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstruct nothrow_t {}; 6777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# define nothrow nothrow_t() 6877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 6977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 7077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner/* 7177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * STLport own bad_alloc exception to be used if the native C++ library 7277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * do not define it or when the new operator do not throw it to avoid 7377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * a useless library dependency. 7477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner */ 7577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerclass bad_alloc : public exception { 7677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerpublic: 7777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bad_alloc () _STLP_NOTHROW_INHERENTLY { } 7877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bad_alloc(const bad_alloc&) _STLP_NOTHROW_INHERENTLY { } 7977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bad_alloc& operator=(const bad_alloc&) _STLP_NOTHROW_INHERENTLY {return *this;} 8077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ~bad_alloc () _STLP_NOTHROW_INHERENTLY { } 8177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const char* what() const _STLP_NOTHROW_INHERENTLY { return "bad alloc"; } 8277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}; 8377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 8477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_END_NAMESPACE 8577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 8677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif /* _STLP_USE_EXCEPTIONS && (_STLP_NO_BAD_ALLOC || _STLP_NEW_DONT_THROW_BAD_ALLOC) */ 8777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 8877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_USE_OWN_NAMESPACE) 8977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 9077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_BEGIN_NAMESPACE 9177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 9277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if !defined (_STLP_NEW_DONT_THROW_BAD_ALLOC) 9377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerusing _STLP_VENDOR_EXCEPT_STD::bad_alloc; 9477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 9577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 9677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if !defined (_STLP_NO_BAD_ALLOC) 9777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerusing _STLP_VENDOR_EXCEPT_STD::nothrow_t; 9877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerusing _STLP_VENDOR_EXCEPT_STD::nothrow; 9977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if defined (_STLP_GLOBAL_NEW_HANDLER) 10077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerusing ::new_handler; 10177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerusing ::set_new_handler; 10277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# else 10377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerusing _STLP_VENDOR_EXCEPT_STD::new_handler; 10477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerusing _STLP_VENDOR_EXCEPT_STD::set_new_handler; 10577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 10677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif /* !_STLP_NO_BAD_ALLOC */ 10777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 10877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_END_NAMESPACE 10977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif /* _STLP_USE_OWN_NAMESPACE */ 11077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 11177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_THROW_BAD_ALLOC 11277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if !defined (_STLP_USE_EXCEPTIONS) 11377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# ifndef _STLP_INTERNAL_CSTDIO 11477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# include <stl/_cstdio.h> 11577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 1162fc11da0e440df88be8fb34e037b435eeb329d2dAndrew Hsieh# define _STLP_THROW_BAD_ALLOC puts("out of memory\n"); abort() 11777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# else 11877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# define _STLP_THROW_BAD_ALLOC _STLP_THROW(_STLP_STD::bad_alloc()) 11977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 12077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 12177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 12277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_NO_NEW_NEW_HEADER) || defined (_STLP_NEW_DONT_THROW_BAD_ALLOC) 12377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# define _STLP_CHECK_NULL_ALLOC(__x) void* __y = __x; if (__y == 0) { _STLP_THROW_BAD_ALLOC; } return __y 12477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#else 12577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# define _STLP_CHECK_NULL_ALLOC(__x) return __x 12677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 12777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 12877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_BEGIN_NAMESPACE 12977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 13077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if ((defined (__IBMCPP__) || defined (__OS400__) || defined (__xlC__) || defined (qTidyHeap)) && defined (_STLP_DEBUG_ALLOC)) 13177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline void* _STLP_CALL __stl_new(size_t __n) { _STLP_CHECK_NULL_ALLOC(::operator new(__n, __FILE__, __LINE__)); } 13277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline void _STLP_CALL __stl_delete(void* __p) { ::operator delete(__p, __FILE__, __LINE__); } 13377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#else 13477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline void* _STLP_CALL __stl_new(size_t __n) { _STLP_CHECK_NULL_ALLOC(::operator new(__n)); } 13577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline void _STLP_CALL __stl_delete(void* __p) { ::operator delete(__p); } 13677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 13777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_END_NAMESPACE 13877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 13977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif /* _STLP_INTERNAL_NEW */ 14077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 14177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner/* 14277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Local Variables: 14377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * mode:C++ 14477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * End: 14577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner */ 146