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