X-Git-Url: http://git.buserror.net/cgi-bin/gitweb.cgi?p=polintos%2Fscott%2Fpriv.git;a=blobdiff_plain;f=include%2Fc%2B%2B%2Fstl%2Fstl%2F_new.h;fp=include%2Fc%2B%2B%2Fstl%2Fstl%2F_new.h;h=dabc5faf565724d2d160f11d8176473b48088c9e;hp=0000000000000000000000000000000000000000;hb=173d8903eb9d51a4ea7d7fa3e52dc86c9bb6d4f1;hpb=b024710fe2b60cd4a42a8993b61333d6cdb56ca3 diff --git a/include/c++/stl/stl/_new.h b/include/c++/stl/stl/_new.h new file mode 100644 index 0000000..dabc5fa --- /dev/null +++ b/include/c++/stl/stl/_new.h @@ -0,0 +1,161 @@ +/* + * 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 +#endif + +#if defined (__BORLANDC__) && (__BORLANDC__ < 0x580) +// new.h uses ::malloc ;( +# include _STLP_NATIVE_CPP_C_HEADER(cstdlib) +using _STLP_VENDOR_CSTD::malloc; +#endif + +#if !defined (_STLP_NO_NEW_NEW_HEADER) +# if defined (_STLP_BROKEN_BAD_ALLOC_CLASS) +# define bad_alloc _STLP_NULLIFIED_BROKEN_BAD_ALLOC_CLASS +# define nothrow_t _STLP_NULLIFIED_BROKEN_BAD_NOTHROW_T_CLASS +# define nothrow _STLP_NULLIFIED_BROKEN_BAD_NOTHROW +# endif + +// eMbedded Visual C++ .NET unfortunately uses _INC_NEW for both and +// we undefine the symbol to get the stuff in the SDK's +# 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 header inclusion. + */ +# error Cannot include native new header as new is a macro. +# endif + +# include _STLP_NATIVE_CPP_RUNTIME_HEADER(new) + +# if defined (_STLP_BROKEN_BAD_ALLOC_CLASS) +# undef bad_alloc +# undef nothrow_t +# undef nothrow +# undef _STLP_NULLIFIED_BROKEN_BAD_ALLOC_CLASS +# undef _STLP_NULLIFIED_BROKEN_BAD_NOTHROW_T_CLASS +# undef _STLP_NULLIFIED_BROKEN_BAD_NOTHROW +# endif +#else +# include +#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 +# 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_RTTI_BUG) +_STLP_BEGIN_NAMESPACE + +inline void* _STLP_CALL __stl_new(size_t __n) +{ return ::malloc(__n); } + +inline void _STLP_CALL __stl_delete(void* __p) +{ ::free(__p); } +_STLP_END_NAMESPACE + +#else /* _STLP_RTTI_BUG */ + +# 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 */ + +# if defined (_STLP_USE_EXCEPTIONS) && \ + (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(_STLP_STD::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 (__DEBUG_ALLOC__)) +inline void* _STLP_CALL __stl_new(size_t __n) { _STLP_CHECK_NULL_ALLOC(::operator _STLP_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 _STLP_NEW(__n)); } +inline void _STLP_CALL __stl_delete(void* __p) { ::operator delete(__p); } +# endif +_STLP_END_NAMESPACE + +#endif /* _STLP_RTTI_BUG */ + +#endif /* _STLP_INTERNAL_NEW */ + + +/* + * Local Variables: + * mode:C++ + * End: + */