Files
FC1/STLPORT/stlport/stl/_new.h
romkazvo 34d6c5d489 123
2023-08-07 19:29:24 +08:00

94 lines
2.4 KiB
C++

#ifndef _STLP_NEW_H_HEADER
# define _STLP_NEW_H_HEADER
# ifdef _STLP_NO_BAD_ALLOC
# ifndef _STLP_NEW_DONT_THROW
# define _STLP_NEW_DONT_THROW 1
# endif /* _STLP_NEW_DONT_THROW */
# include <exception>
_STLP_BEGIN_NAMESPACE
struct nothrow_t {};
# ifdef _STLP_OWN_IOSTREAMS
extern _STLP_DECLSPEC const nothrow_t nothrow;
# else
# define nothrow nothrow_t()
# endif
class bad_alloc : public _STLP_EXCEPTION_BASE {
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_NO_BAD_ALLOC */
#ifdef _STLP_WINCE
_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_WINCE */
#include <new>
# ifndef _STLP_NO_BAD_ALLOC
# ifdef _STLP_USE_OWN_NAMESPACE
_STLP_BEGIN_NAMESPACE
using _STLP_VENDOR_EXCEPT_STD::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
_STLP_END_NAMESPACE
# endif /* _STLP_OWN_NAMESPACE */
# endif /* _STLP_NO_BAD_ALLOC */
# if defined (_STLP_NO_NEW_NEW_HEADER) || defined (_STLP_NEW_DONT_THROW) && ! defined (_STLP_CHECK_NULL_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(__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_WINCE */
#endif /* _STLP_NEW_H_HEADER */