ossrv_pub/memory/inc/stdapis/stlport/stl/_new.h
changeset 31 ce057bb09d0b
child 45 4b03adbd26ca
equal deleted inserted replaced
30:e20de85af2ee 31:ce057bb09d0b
       
     1 /*
       
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description: 
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 #ifndef _STLP_NEW_H_HEADER
       
    20 # define _STLP_NEW_H_HEADER
       
    21 
       
    22 # ifdef _STLP_NO_BAD_ALLOC
       
    23 # ifndef _STLP_NEW_DONT_THROW
       
    24 #   define _STLP_NEW_DONT_THROW 1
       
    25 # endif /* _STLP_NEW_DONT_THROW */
       
    26 
       
    27 #  include <exception>
       
    28 
       
    29 
       
    30 _STLP_BEGIN_NAMESPACE
       
    31 
       
    32 #if defined(__SYMBIAN32__) && ( defined( __WINSCW__) || defined(__GCCXML__)) 
       
    33 
       
    34 // already defined symcpp.h included from rvct2_2.h
       
    35 struct nothrow_t {};
       
    36 #endif
       
    37 
       
    38 
       
    39 
       
    40 # ifdef _STLP_OWN_IOSTREAMS
       
    41 #ifdef __ARMCC__
       
    42 extern _STLP_DECLSPEC const nothrow_t nothrow;
       
    43 #else
       
    44 extern IMPORT_C const nothrow_t& GetNoThrowObj();
       
    45 #define nothrow GetNoThrowObj()
       
    46 #endif
       
    47 # else
       
    48 #  define nothrow nothrow_t()
       
    49 # endif
       
    50 #ifndef _STLP_EXCEPTION_BASE
       
    51 #  define _STLP_EXCEPTION_BASE exception
       
    52 #endif
       
    53 
       
    54 class bad_alloc : public _STLP_EXCEPTION_BASE { 
       
    55 public:
       
    56   bad_alloc () _STLP_NOTHROW_INHERENTLY { }
       
    57   bad_alloc(const bad_alloc&) _STLP_NOTHROW_INHERENTLY { }
       
    58   bad_alloc& operator=(const bad_alloc&) _STLP_NOTHROW_INHERENTLY {return *this;}
       
    59   ~bad_alloc () _STLP_NOTHROW_INHERENTLY { }
       
    60   const char* what() const _STLP_NOTHROW_INHERENTLY { return "bad alloc"; }
       
    61 };
       
    62 
       
    63 _STLP_END_NAMESPACE
       
    64 
       
    65 #endif /* _STLP_NO_BAD_ALLOC */
       
    66 
       
    67 #if defined (_STLP_WINCE)
       
    68 _STLP_BEGIN_NAMESPACE
       
    69 
       
    70 inline void* _STLP_CALL __stl_new(size_t __n) {
       
    71   return ::malloc(__n);
       
    72 }
       
    73 
       
    74 inline void _STLP_CALL __stl_delete(void* __p) {
       
    75   free(__p);
       
    76 }
       
    77 
       
    78 #ifndef __cdecl
       
    79 # define __cdecl
       
    80 #endif
       
    81 
       
    82 _STLP_END_NAMESPACE
       
    83 
       
    84 #else /* _STLP_WINCE */
       
    85 
       
    86 #include <new>
       
    87 
       
    88 # ifndef _STLP_NO_BAD_ALLOC
       
    89 #  ifdef _STLP_USE_OWN_NAMESPACE
       
    90 
       
    91     _STLP_BEGIN_NAMESPACE
       
    92     using _STLP_VENDOR_EXCEPT_STD::bad_alloc;
       
    93     using _STLP_VENDOR_EXCEPT_STD::nothrow_t;
       
    94     using _STLP_VENDOR_EXCEPT_STD::nothrow;
       
    95 
       
    96 #  if defined (_STLP_GLOBAL_NEW_HANDLER)
       
    97     using ::new_handler;
       
    98     using ::set_new_handler;
       
    99 #  else
       
   100     using _STLP_VENDOR_EXCEPT_STD::new_handler;
       
   101     using _STLP_VENDOR_EXCEPT_STD::set_new_handler;
       
   102 #  endif
       
   103     
       
   104     _STLP_END_NAMESPACE
       
   105 
       
   106 #  endif /* _STLP_OWN_NAMESPACE */
       
   107 
       
   108 # endif /* _STLP_NO_BAD_ALLOC */
       
   109 
       
   110 # if defined (_STLP_NO_NEW_NEW_HEADER) || defined (_STLP_NEW_DONT_THROW) || defined (__SYMBIAN32__) \
       
   111                     || defined (__WINS__) && ! defined (_STLP_CHECK_NULL_ALLOC)
       
   112 #  define _STLP_CHECK_NULL_ALLOC(__x) void* __y = __x;if (__y == 0){_STLP_THROW(bad_alloc());}return __y
       
   113 # if defined (__SYMBIAN32__)
       
   114 //# define _STLP_NEW operator new
       
   115 #define _STLP_NEW  ::malloc
       
   116 #endif
       
   117 /*
       
   118 # elif defined (__SYMBIAN32__) || defined (__WINS__)
       
   119 #  ifndef _STLP_USE_TRAP_LEAVE
       
   120 #   define _STLP_CHECK_NULL_ALLOC(__x) void* __y = __x;if (__y == 0){abort();}return __y
       
   121 #  else
       
   122 #   define _STLP_NEW(x) :: operator new (x, ELeave) 
       
   123 #   define _STLP_CHECK_NULL_ALLOC(__x) return __x
       
   124 #  endif
       
   125 */
       
   126 # else
       
   127 #  define _STLP_CHECK_NULL_ALLOC(__x) return __x
       
   128 # endif
       
   129 
       
   130 #ifndef _STLP_NEW
       
   131 # define _STLP_NEW ::operator new
       
   132 #endif
       
   133 # define _STLP_PLACEMENT_NEW ::new
       
   134 
       
   135 _STLP_BEGIN_NAMESPACE
       
   136 
       
   137 #ifdef __SYMBIAN32__
       
   138 
       
   139 typedef void(*new_handler)();
       
   140 
       
   141 _STLP_DECLSPEC new_handler set_new_handler(new_handler pnew)  __NO_THROW;
       
   142 
       
   143 #endif
       
   144 
       
   145 #if (( defined(__IBMCPP__)|| defined(__OS400__) || defined (__xlC__) || defined (qTidyHeap)) && defined(__DEBUG_ALLOC__) )
       
   146 inline void*  _STLP_CALL __stl_new(size_t __n) {  _STLP_CHECK_NULL_ALLOC(_STLP_NEW(__n, __FILE__, __LINE__)); }
       
   147 inline void _STLP_CALL __stl_delete(void* __p) { ::operator delete(__p, __FILE__, __LINE__); }
       
   148 #else
       
   149 inline void*  _STLP_CALL __stl_new(size_t __n)   { return ::operator new(__n); }
       
   150 inline void   _STLP_CALL __stl_delete(void* __p) { ::operator delete(__p); }
       
   151 #endif
       
   152 _STLP_END_NAMESPACE
       
   153 
       
   154 
       
   155 # endif /* _STLP_WINCE */
       
   156 
       
   157 #if defined(__SYMBIAN32__) && !defined(__GCCE__)
       
   158 IMPORT_C void *operator new(unsigned int aSize);
       
   159 
       
   160 IMPORT_C void *operator new[](unsigned int aSize);
       
   161 #endif
       
   162 
       
   163 IMPORT_C void operator delete(void* aPtr) __NO_THROW;
       
   164 
       
   165 IMPORT_C void operator delete[](void* aPtr) __NO_THROW;
       
   166 
       
   167 IMPORT_C void* operator new(unsigned int aSize, const std::nothrow_t& /*aNoThrow*/)  __NO_THROW;
       
   168 
       
   169 IMPORT_C void* operator new[](unsigned int aSize, const std::nothrow_t& aNoThrow)  __NO_THROW;
       
   170 
       
   171 IMPORT_C void operator delete(void* aPtr, const std::nothrow_t& /*aNoThrow*/)  __NO_THROW;
       
   172 
       
   173 IMPORT_C void operator delete[](void* aPtr, const std::nothrow_t& /*aNoThrow*/)  __NO_THROW;
       
   174 
       
   175 
       
   176 // placement delete
       
   177 #ifndef __PLACEMENT_VEC_NEW_INLINE
       
   178 #define __PLACEMENT_VEC_NEW_INLINE
       
   179 inline void* operator new[](unsigned int /*aSize*/, void* aBase)  __NO_THROW
       
   180 	{return aBase;}
       
   181 inline void operator delete[](void* /*aPtr*/, void* /*aBase*/)  __NO_THROW
       
   182     {
       
   183     
       
   184     }
       
   185 #endif
       
   186 
       
   187 #ifndef __PLACEMENT_NEW_INLINE
       
   188 #define __PLACEMENT_NEW_INLINE
       
   189 inline void* operator new(unsigned int /*aSize*/, void* aBase)  __NO_THROW
       
   190 	{return aBase;}
       
   191 
       
   192 // Global placement operator delete
       
   193 inline void operator delete(void* /*aPtr*/, void* /*aBase*/)  __NO_THROW
       
   194 	{}
       
   195 #endif //__PLACEMENT_NEW_INLINE
       
   196 
       
   197 
       
   198 #endif /* _STLP_NEW_H_HEADER */