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