1  /*
2  *
3  * Copyright (c) 1994
4  * Hewlett-Packard Company
5  *
6  * Copyright (c) 1996,1997
7  * Silicon Graphics Computer Systems, Inc.
8  *
9  * Copyright (c) 1997
10  * Moscow Center for SPARC Technology
11  *
12  * Copyright (c) 1999
13  * Boris Fomitchev
14  *
15  * This material is provided "as is", with absolutely no warranty expressed
16  * or implied. Any use is at your own risk.
17  *
18  * Permission to use or copy this software for any purpose is hereby granted
19  * without fee, provided the above notices are retained on all copies.
20  * Permission to modify the code and to distribute modified code is granted,
21  * provided the above notices are retained, and a notice that the code was
22  * modified is included with the above copyright notice.
23  *
24  */
25 
26 #define _STLP_EXPOSE_GLOBALS_IMPLEMENTATION
27 
28 #include "stlport_prefix.h"
29 
30 #if !defined (_STLP_DEBUG) && ! defined (_STLP_ASSERTIONS)
31 #  if !defined (__APPLE__) || !defined (__GNUC__) || (__GNUC__ < 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ < 3))
32 /* dums: Please if the following code was being uncommented please explain why
33  * as for the moment it only looks like a source of inconsistency in the way
34  * STLport different translation units are compiled.
35  */
36 //#    define _STLP_ASSERTIONS 1
37 #  endif
38 #endif
39 
40 #include <utility>
41 #include <memory>
42 #include <vector>
43 #include <set>
44 #include <list>
45 #include <slist>
46 #include <deque>
47 #include <hash_map>
48 #include <limits>
49 #include <string>
50 #include <stdexcept>
51 #include <bitset>
52 #include <locale>
53 
54 #if defined (__DMC__)
55 // for rope static members
56 #  include <rope>
57 #endif
58 
59 #include <stl/_range_errors.c>
60 
61 _STLP_BEGIN_NAMESPACE
62 
63 #if defined (_STLP_NO_EXCEPTION_HEADER) || defined (_STLP_BROKEN_EXCEPTION_CLASS)
exception()64 exception::exception() _STLP_NOTHROW {}
~exception()65 exception::~exception() _STLP_NOTHROW {}
bad_exception()66 bad_exception::bad_exception() _STLP_NOTHROW {}
~bad_exception()67 bad_exception::~bad_exception() _STLP_NOTHROW {}
what() const68 const char* exception::what() const _STLP_NOTHROW { return "class exception"; }
what() const69 const char* bad_exception::what() const _STLP_NOTHROW { return "class bad_exception"; }
70 #endif
71 
72 #if defined (_STLP_OWN_STDEXCEPT)
73 #  include <stl/_stdexcept_base.c>
74 
75 // boris : those are needed to force typeinfo nodes to be created in here only
~logic_error()76 logic_error::~logic_error() _STLP_NOTHROW_INHERENTLY {}
~runtime_error()77 runtime_error::~runtime_error() _STLP_NOTHROW_INHERENTLY {}
~domain_error()78 domain_error::~domain_error() _STLP_NOTHROW_INHERENTLY {}
~invalid_argument()79 invalid_argument::~invalid_argument() _STLP_NOTHROW_INHERENTLY {}
~length_error()80 length_error::~length_error() _STLP_NOTHROW_INHERENTLY {}
~out_of_range()81 out_of_range::~out_of_range() _STLP_NOTHROW_INHERENTLY {}
~range_error()82 range_error::~range_error() _STLP_NOTHROW_INHERENTLY {}
~overflow_error()83 overflow_error::~overflow_error() _STLP_NOTHROW_INHERENTLY {}
~underflow_error()84 underflow_error::~underflow_error() _STLP_NOTHROW_INHERENTLY {}
85 
86 #endif
87 
88 #if !defined(_STLP_WCE_EVC3)
89 #  if defined (_STLP_NO_BAD_ALLOC)
90 const nothrow_t nothrow /* = {} */;
91 #  endif
92 #endif
93 
94 #if !defined (_STLP_NO_FORCE_INSTANTIATE)
95 
96 #  if defined (_STLP_DEBUG) || defined (_STLP_ASSERTIONS)
97 _STLP_MOVE_TO_PRIV_NAMESPACE
98 template class _STLP_CLASS_DECLSPEC __stl_debug_engine<bool>;
99 _STLP_MOVE_TO_STD_NAMESPACE
100 #  endif
101 
102 template class _STLP_CLASS_DECLSPEC __debug_alloc<__node_alloc>;
103 template class _STLP_CLASS_DECLSPEC __debug_alloc<__new_alloc>;
104 
105 //Export of the types used to represent buckets in the hashtable implementation.
106 /*
107  * For the vector class we do not use any MSVC6 workaround even if we export it from
108  * the STLport dynamic libraries because we know what methods are called and none is
109  * a template method. Moreover the exported class is an instanciation of vector with
110  * _Slist_node_base struct that is an internal STLport class that no user should ever
111  * use.
112  */
113 #  if !defined (_STLP_USE_PTR_SPECIALIZATIONS)
114 template class _STLP_CLASS_DECLSPEC allocator<_STLP_PRIV _Slist_node_base*>;
115 
116 _STLP_MOVE_TO_PRIV_NAMESPACE
117 template class _STLP_CLASS_DECLSPEC _STLP_alloc_proxy<_Slist_node_base**, _Slist_node_base*,
118                                                       allocator<_Slist_node_base*> >;
119 template class _STLP_CLASS_DECLSPEC _Vector_base<_Slist_node_base*,
120                                                  allocator<_Slist_node_base*> >;
121 _STLP_MOVE_TO_STD_NAMESPACE
122 #  endif
123 
124 #  if defined (_STLP_DEBUG)
125 _STLP_MOVE_TO_PRIV_NAMESPACE
126 template class _STLP_CLASS_DECLSPEC _STLP_NON_DBG_NAME(vector)<_Slist_node_base*,
127                                                                allocator<_Slist_node_base*> >;
128 _STLP_MOVE_TO_STD_NAMESPACE
129 #  endif
130 
131 template class _STLP_CLASS_DECLSPEC vector<_STLP_PRIV _Slist_node_base*,
132                                            allocator<_STLP_PRIV _Slist_node_base*> >;
133 //End of hashtable bucket types export.
134 
135 //Export of _Locale_impl facets container:
136 #  if !defined (_STLP_USE_PTR_SPECIALIZATIONS)
137 template class _STLP_CLASS_DECLSPEC allocator<locale::facet*>;
138 
139 _STLP_MOVE_TO_PRIV_NAMESPACE
140 template class _STLP_CLASS_DECLSPEC _STLP_alloc_proxy<locale::facet**, locale::facet*, allocator<locale::facet*> >;
141 template class _STLP_CLASS_DECLSPEC _Vector_base<locale::facet*, allocator<locale::facet*> >;
142 _STLP_MOVE_TO_STD_NAMESPACE
143 
144 #  endif
145 #  if defined (_STLP_DEBUG)
146 _STLP_MOVE_TO_PRIV_NAMESPACE
147 #    define _STLP_NON_DBG_VECTOR _STLP_NON_DBG_NAME(vector)
148 template class _STLP_CLASS_DECLSPEC __construct_checker<_STLP_PRIV _STLP_NON_DBG_VECTOR<locale::facet*, allocator<locale::facet*> > >;
149 template class _STLP_CLASS_DECLSPEC _STLP_NON_DBG_VECTOR<locale::facet*, allocator<locale::facet*> >;
150 #    undef _STLP_NON_DBG_VECTOR
151 _STLP_MOVE_TO_STD_NAMESPACE
152 #  endif
153 
154 template class _STLP_CLASS_DECLSPEC vector<locale::facet*, allocator<locale::facet*> >;
155 //End of export of _Locale_impl facets container.
156 
157 #  if defined (_STLP_USE_PTR_SPECIALIZATIONS)
158 template class _STLP_CLASS_DECLSPEC allocator<void*>;
159 
160 typedef _STLP_PRIV _List_node<void*> _VoidPtr_Node;
161 template class _STLP_CLASS_DECLSPEC allocator<_VoidPtr_Node>;
162 
163 _STLP_MOVE_TO_PRIV_NAMESPACE
164 
165 template class _STLP_CLASS_DECLSPEC _STLP_alloc_proxy<void**, void*, allocator<void*> >;
166 template class _STLP_CLASS_DECLSPEC _Vector_base<void*, allocator<void*> >;
167 template class _STLP_CLASS_DECLSPEC _STLP_PTR_IMPL_NAME(vector)<void*, allocator<void*> >;
168 
169 template class _STLP_CLASS_DECLSPEC _List_node<void*>;
170 template class _STLP_CLASS_DECLSPEC _STLP_alloc_proxy<_List_node_base, _VoidPtr_Node, allocator<_VoidPtr_Node> >;
171 template class _STLP_CLASS_DECLSPEC _List_base<void*, allocator<void*> >;
172 template class _STLP_CLASS_DECLSPEC _STLP_PTR_IMPL_NAME(list)<void*, allocator<void*> >;
173 
174 template class _STLP_CLASS_DECLSPEC _Slist_node<void*>;
175 template class _STLP_CLASS_DECLSPEC _STLP_alloc_proxy<_Slist_node_base, _Slist_node<void*>, allocator<_Slist_node<void*> > >;
176 template class _STLP_CLASS_DECLSPEC _Slist_base<void*, allocator<void*> >;
177 template class _STLP_CLASS_DECLSPEC _STLP_PTR_IMPL_NAME(slist)<void*, allocator<void*> >;
178 
179 template class  _STLP_CLASS_DECLSPEC _STLP_alloc_proxy<size_t, void*, allocator<void*> >;
180 template class  _STLP_CLASS_DECLSPEC _STLP_alloc_proxy<void***, void**, allocator<void**> >;
181 template struct _STLP_CLASS_DECLSPEC _Deque_iterator<void*, _Nonconst_traits<void*> >;
182 template class  _STLP_CLASS_DECLSPEC _Deque_base<void*, allocator<void*> >;
183 template class  _STLP_CLASS_DECLSPEC _STLP_PTR_IMPL_NAME(deque)<void*, allocator<void*> >;
184 
185 _STLP_MOVE_TO_STD_NAMESPACE
186 
187 #  endif /* _STLP_USE_PTR_SPECIALIZATIONS */
188 
189 _STLP_MOVE_TO_PRIV_NAMESPACE
190 
191 template class _STLP_CLASS_DECLSPEC _Rb_global<bool>;
192 template class _STLP_CLASS_DECLSPEC _List_global<bool>;
193 
194 template class _STLP_CLASS_DECLSPEC _Sl_global<bool>;
195 template class _STLP_CLASS_DECLSPEC _Stl_prime<bool>;
196 
197 template class _STLP_CLASS_DECLSPEC _LimG<bool>;
198 
199 _STLP_MOVE_TO_STD_NAMESPACE
200 
201 #endif /* _STLP_NO_FORCE_INSTANTIATE */
202 
203 _STLP_END_NAMESPACE
204 
205 #if defined (_STLP_SIGNAL_RUNTIME_COMPATIBILITY)
_STLP_SIGNAL_RUNTIME_COMPATIBILITY()206 extern "C" void _STLP_DECLSPEC _STLP_CALL _STLP_SIGNAL_RUNTIME_COMPATIBILITY() {}
207 #endif
208 
209 #define FORCE_SYMBOL extern
210 
211 #if defined (_WIN32) && defined (_STLP_USE_DECLSPEC) && !defined (_STLP_USE_STATIC_LIB)
212 // stlportmt.cpp : Defines the entry point for the DLL application.
213 //
214 #  undef FORCE_SYMBOL
215 #  define FORCE_SYMBOL APIENTRY
216 
217 extern "C" {
218 
DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID)219 BOOL APIENTRY DllMain( HANDLE hModule,
220                        DWORD  ul_reason_for_call,
221                        LPVOID) {
222   switch (ul_reason_for_call) {
223     case DLL_PROCESS_ATTACH:
224       DisableThreadLibraryCalls((HINSTANCE)hModule);
225     case DLL_THREAD_ATTACH:
226     case DLL_THREAD_DETACH:
227     case DLL_PROCESS_DETACH:
228       break;
229     }
230   return TRUE;
231 }
232 
233 } /* extern "C" */
234 
235 #if !defined (_STLP_MSVC) && !defined (__MINGW32__)
236 _STLP_BEGIN_NAMESPACE
237 
238 static void FORCE_SYMBOL
force_link()239 force_link() {
240   set<int>::iterator iter;
241   // _M_increment; _M_decrement instantiation
242   ++iter;
243   --iter;
244 }
245 
246 _STLP_END_NAMESPACE
247 #endif
248 
249 #endif /* _WIN32 */
250 
251 #if defined (__ICL) && (__ICL >= 900) && (_STLP_MSVC_LIB < 1300)
252 #  undef std
253 
254 namespace std
255 {
unexpected()256   void _STLP_CALL unexpected() {
257     unexpected_handler hdl;
258     set_unexpected(hdl = set_unexpected((unexpected_handler)0));
259     hdl();
260   }
261 }
262 #endif
263