epoc32/include/tools/stlport/stl/_new.h
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
permissions -rw-r--r--
Current Symbian^3 public API header files (from PDK 3.0.h)
This is the epoc32/include tree with the "platform" subtrees removed, and
all but a selected few mbg and rsg files removed.
     1 /*
     2  * Copyright (c) 1999
     3  * Boris Fomitchev
     4  *
     5  * This material is provided "as is", with absolutely no warranty expressed
     6  * or implied. Any use is at your own risk.
     7  *
     8  * Permission to use or copy this software for any purpose is hereby granted
     9  * without fee, provided the above notices are retained on all copies.
    10  * Permission to modify the code and to distribute modified code is granted,
    11  * provided the above notices are retained, and a notice that the code was
    12  * modified is included with the above copyright notice.
    13  *
    14  */
    15 
    16 #ifndef _STLP_INTERNAL_NEW
    17 #define _STLP_INTERNAL_NEW
    18 
    19 #ifndef _STLP_INTERNAL_CSTDDEF
    20 // size_t
    21 #  include <stl/_cstddef.h>
    22 #endif
    23 
    24 #if defined (__BORLANDC__) && (__BORLANDC__ < 0x580)
    25 // new.h uses ::malloc ;(
    26 #  include _STLP_NATIVE_CPP_C_HEADER(cstdlib)
    27 using _STLP_VENDOR_CSTD::malloc;
    28 #endif
    29 
    30 #if !defined (_STLP_NO_NEW_NEW_HEADER)
    31 #  if defined (_STLP_BROKEN_BAD_ALLOC_CLASS)
    32 #    define bad_alloc _STLP_NULLIFIED_BROKEN_BAD_ALLOC_CLASS
    33 #    define nothrow_t _STLP_NULLIFIED_BROKEN_BAD_NOTHROW_T_CLASS
    34 #    define nothrow _STLP_NULLIFIED_BROKEN_BAD_NOTHROW
    35 #  endif
    36 
    37 // eMbedded Visual C++ .NET unfortunately uses _INC_NEW for both <new.h> and <new>
    38 // we undefine the symbol to get the stuff in the SDK's <new>
    39 #  if defined (_STLP_WCE_NET) && defined (_INC_NEW)
    40 #    undef _INC_NEW
    41 #  endif
    42 
    43 #  if defined (new)
    44 /* STLport cannot replace native Std library new header if new is a macro,
    45  * please define new macro after <new> header inclusion.
    46  */
    47 #    error Cannot include native new header as new is a macro.
    48 #  endif
    49 
    50 #  include _STLP_NATIVE_CPP_RUNTIME_HEADER(new)
    51 
    52 #  if defined (_STLP_BROKEN_BAD_ALLOC_CLASS)
    53 #    undef bad_alloc
    54 #    undef nothrow_t
    55 #    undef nothrow
    56 #    undef _STLP_NULLIFIED_BROKEN_BAD_ALLOC_CLASS
    57 #    undef _STLP_NULLIFIED_BROKEN_BAD_NOTHROW_T_CLASS
    58 #    undef _STLP_NULLIFIED_BROKEN_BAD_NOTHROW
    59 #  endif
    60 #else
    61 #  include <new.h>
    62 #endif
    63 
    64 #if defined (_STLP_NO_BAD_ALLOC) && !defined (_STLP_NEW_DONT_THROW_BAD_ALLOC)
    65 #  define _STLP_NEW_DONT_THROW_BAD_ALLOC 1
    66 #endif
    67 
    68 #if defined (_STLP_USE_EXCEPTIONS) && defined (_STLP_NEW_DONT_THROW_BAD_ALLOC)
    69 
    70 #  ifndef _STLP_INTERNAL_EXCEPTION
    71 #    include <stl/_exception.h>
    72 #  endif
    73 
    74 _STLP_BEGIN_NAMESPACE
    75 
    76 #  if defined (_STLP_NO_BAD_ALLOC)
    77 struct nothrow_t {};
    78 #    define nothrow nothrow_t()
    79 #  endif
    80 
    81 /*
    82  * STLport own bad_alloc exception to be used if the native C++ library
    83  * do not define it or when the new operator do not throw it to avoid
    84  * a useless library dependency.
    85  */
    86 class bad_alloc : public exception {
    87 public:
    88   bad_alloc () _STLP_NOTHROW_INHERENTLY { }
    89   bad_alloc(const bad_alloc&) _STLP_NOTHROW_INHERENTLY { }
    90   bad_alloc& operator=(const bad_alloc&) _STLP_NOTHROW_INHERENTLY {return *this;}
    91   ~bad_alloc () _STLP_NOTHROW_INHERENTLY { }
    92   const char* what() const _STLP_NOTHROW_INHERENTLY { return "bad alloc"; }
    93 };
    94 
    95 _STLP_END_NAMESPACE
    96 
    97 #endif /* _STLP_USE_EXCEPTIONS && (_STLP_NO_BAD_ALLOC || _STLP_NEW_DONT_THROW_BAD_ALLOC) */
    98 
    99 #if defined (_STLP_RTTI_BUG)
   100 _STLP_BEGIN_NAMESPACE
   101 
   102 inline void* _STLP_CALL __stl_new(size_t __n)
   103 { return ::malloc(__n); }
   104 
   105 inline void _STLP_CALL __stl_delete(void* __p)
   106 { ::free(__p); }
   107 _STLP_END_NAMESPACE
   108 
   109 #else /* _STLP_RTTI_BUG */
   110 
   111 #  if defined (_STLP_USE_OWN_NAMESPACE)
   112 
   113 _STLP_BEGIN_NAMESPACE
   114 
   115 #    if !defined (_STLP_NEW_DONT_THROW_BAD_ALLOC)
   116 using _STLP_VENDOR_EXCEPT_STD::bad_alloc;
   117 #    endif
   118 
   119 #    if !defined (_STLP_NO_BAD_ALLOC)
   120 using _STLP_VENDOR_EXCEPT_STD::nothrow_t;
   121 using _STLP_VENDOR_EXCEPT_STD::nothrow;
   122 #      if defined (_STLP_GLOBAL_NEW_HANDLER)
   123 using ::new_handler;
   124 using ::set_new_handler;
   125 #      else
   126 using _STLP_VENDOR_EXCEPT_STD::new_handler;
   127 using _STLP_VENDOR_EXCEPT_STD::set_new_handler;
   128 #      endif
   129 #    endif /* !_STLP_NO_BAD_ALLOC */
   130 
   131 _STLP_END_NAMESPACE
   132 #  endif /* _STLP_USE_OWN_NAMESPACE */
   133 
   134 #  if defined (_STLP_USE_EXCEPTIONS) && \
   135      (defined (_STLP_NO_NEW_NEW_HEADER) || defined (_STLP_NEW_DONT_THROW_BAD_ALLOC))
   136 #    define _STLP_CHECK_NULL_ALLOC(__x) void* __y = __x; if (__y == 0) { _STLP_THROW(_STLP_STD::bad_alloc()); } return __y
   137 #  else
   138 #    define _STLP_CHECK_NULL_ALLOC(__x) return __x
   139 #  endif
   140 
   141 _STLP_BEGIN_NAMESPACE
   142 
   143 #  if ((defined (__IBMCPP__) || defined (__OS400__) || defined (__xlC__) || defined (qTidyHeap)) && defined (__DEBUG_ALLOC__))
   144 inline void* _STLP_CALL __stl_new(size_t __n)   { _STLP_CHECK_NULL_ALLOC(::operator _STLP_NEW(__n, __FILE__, __LINE__)); }
   145 inline void  _STLP_CALL __stl_delete(void* __p) { ::operator delete(__p, __FILE__, __LINE__); }
   146 #  else
   147 inline void* _STLP_CALL __stl_new(size_t __n)   { _STLP_CHECK_NULL_ALLOC(::operator _STLP_NEW(__n)); }
   148 inline void  _STLP_CALL __stl_delete(void* __p) { ::operator delete(__p); }
   149 #  endif
   150 _STLP_END_NAMESPACE
   151 
   152 #endif /* _STLP_RTTI_BUG */
   153 
   154 #endif /* _STLP_INTERNAL_NEW */
   155 
   156 
   157 /*
   158  * Local Variables:
   159  * mode:C++
   160  * End:
   161  */