diff options
Diffstat (limited to '6/sources/cxx-stl/stlport/stlport/stl/_new.h')
-rw-r--r-- | 6/sources/cxx-stl/stlport/stlport/stl/_new.h | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/6/sources/cxx-stl/stlport/stlport/stl/_new.h b/6/sources/cxx-stl/stlport/stlport/stl/_new.h new file mode 100644 index 0000000..94094cf --- /dev/null +++ b/6/sources/cxx-stl/stlport/stlport/stl/_new.h @@ -0,0 +1,145 @@ +/* + * Copyright (c) 1999 + * Boris Fomitchev + * + * This material is provided "as is", with absolutely no warranty expressed + * or implied. Any use is at your own risk. + * + * Permission to use or copy this software for any purpose is hereby granted + * without fee, provided the above notices are retained on all copies. + * Permission to modify the code and to distribute modified code is granted, + * provided the above notices are retained, and a notice that the code was + * modified is included with the above copyright notice. + * + */ + +#ifndef _STLP_INTERNAL_NEW +#define _STLP_INTERNAL_NEW + +#ifndef _STLP_INTERNAL_CSTDDEF +// size_t +# include <stl/_cstddef.h> +#endif + +#if defined (__BORLANDC__) && (__BORLANDC__ < 0x570) +// new.h uses ::malloc ;( +# include _STLP_NATIVE_CPP_C_HEADER(cstdlib) +using _STLP_VENDOR_CSTD::malloc; +#endif + +#if !defined (_STLP_NO_NEW_NEW_HEADER) +// eMbedded Visual C++ .NET unfortunately uses _INC_NEW for both <new.h> and <new> +// we undefine the symbol to get the stuff in the SDK's <new> +# if defined (_STLP_WCE_NET) && defined (_INC_NEW) +# undef _INC_NEW +# endif + +# if defined (new) +/* STLport cannot replace native Std library new header if new is a macro, + * please define new macro after <new> header inclusion. + */ +# error Cannot include native new header as new is a macro. +# endif + +# if defined (_STLP_HAS_INCLUDE_NEXT) +# include_next <new> +# else +# include _STLP_NATIVE_CPP_RUNTIME_HEADER(new) +# endif +#else +# include <new.h> +#endif + +#if defined (_STLP_NO_BAD_ALLOC) && !defined (_STLP_NEW_DONT_THROW_BAD_ALLOC) +# define _STLP_NEW_DONT_THROW_BAD_ALLOC 1 +#endif + +#if defined (_STLP_USE_EXCEPTIONS) && defined (_STLP_NEW_DONT_THROW_BAD_ALLOC) + +# ifndef _STLP_INTERNAL_EXCEPTION +# include <stl/_exception.h> +# endif + +_STLP_BEGIN_NAMESPACE + +# if defined (_STLP_NO_BAD_ALLOC) +struct nothrow_t {}; +# define nothrow nothrow_t() +# endif + +/* + * STLport own bad_alloc exception to be used if the native C++ library + * do not define it or when the new operator do not throw it to avoid + * a useless library dependency. + */ +class bad_alloc : public exception { +public: + bad_alloc () _STLP_NOTHROW_INHERENTLY { } + bad_alloc(const bad_alloc&) _STLP_NOTHROW_INHERENTLY { } + bad_alloc& operator=(const bad_alloc&) _STLP_NOTHROW_INHERENTLY {return *this;} + ~bad_alloc () _STLP_NOTHROW_INHERENTLY { } + const char* what() const _STLP_NOTHROW_INHERENTLY { return "bad alloc"; } +}; + +_STLP_END_NAMESPACE + +#endif /* _STLP_USE_EXCEPTIONS && (_STLP_NO_BAD_ALLOC || _STLP_NEW_DONT_THROW_BAD_ALLOC) */ + +#if defined (_STLP_USE_OWN_NAMESPACE) + +_STLP_BEGIN_NAMESPACE + +# if !defined (_STLP_NEW_DONT_THROW_BAD_ALLOC) +using _STLP_VENDOR_EXCEPT_STD::bad_alloc; +# endif + +# if !defined (_STLP_NO_BAD_ALLOC) +using _STLP_VENDOR_EXCEPT_STD::nothrow_t; +using _STLP_VENDOR_EXCEPT_STD::nothrow; +# if defined (_STLP_GLOBAL_NEW_HANDLER) +using ::new_handler; +using ::set_new_handler; +# else +using _STLP_VENDOR_EXCEPT_STD::new_handler; +using _STLP_VENDOR_EXCEPT_STD::set_new_handler; +# endif +# endif /* !_STLP_NO_BAD_ALLOC */ + +_STLP_END_NAMESPACE +#endif /* _STLP_USE_OWN_NAMESPACE */ + +#ifndef _STLP_THROW_BAD_ALLOC +# if !defined (_STLP_USE_EXCEPTIONS) +# ifndef _STLP_INTERNAL_CSTDIO +# include <stl/_cstdio.h> +# endif +# define _STLP_THROW_BAD_ALLOC puts("out of memory\n"); exit(1) +# else +# define _STLP_THROW_BAD_ALLOC _STLP_THROW(_STLP_STD::bad_alloc()) +# endif +#endif + +#if defined (_STLP_NO_NEW_NEW_HEADER) || defined (_STLP_NEW_DONT_THROW_BAD_ALLOC) +# define _STLP_CHECK_NULL_ALLOC(__x) void* __y = __x; if (__y == 0) { _STLP_THROW_BAD_ALLOC; } return __y +#else +# define _STLP_CHECK_NULL_ALLOC(__x) return __x +#endif + +_STLP_BEGIN_NAMESPACE + +#if ((defined (__IBMCPP__) || defined (__OS400__) || defined (__xlC__) || defined (qTidyHeap)) && defined (_STLP_DEBUG_ALLOC)) +inline void* _STLP_CALL __stl_new(size_t __n) { _STLP_CHECK_NULL_ALLOC(::operator new(__n, __FILE__, __LINE__)); } +inline void _STLP_CALL __stl_delete(void* __p) { ::operator delete(__p, __FILE__, __LINE__); } +#else +inline void* _STLP_CALL __stl_new(size_t __n) { _STLP_CHECK_NULL_ALLOC(::operator new(__n)); } +inline void _STLP_CALL __stl_delete(void* __p) { ::operator delete(__p); } +#endif +_STLP_END_NAMESPACE + +#endif /* _STLP_INTERNAL_NEW */ + +/* + * Local Variables: + * mode:C++ + * End: + */ |