mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			124 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			124 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C++
		
	
	
	
| /*
 | |
|  *
 | |
|  * Copyright (c) 1994
 | |
|  * Hewlett-Packard Company
 | |
|  *
 | |
|  * Permission to use, copy, modify, distribute and sell this software
 | |
|  * and its documentation for any purpose is hereby granted without fee,
 | |
|  * provided that the above copyright notice appear in all copies and
 | |
|  * that both that copyright notice and this permission notice appear
 | |
|  * in supporting documentation.  Hewlett-Packard Company makes no
 | |
|  * representations about the suitability of this software for any
 | |
|  * purpose.  It is provided "as is" without express or implied warranty.
 | |
|  *
 | |
|  *
 | |
|  * Copyright (c) 1996,1997
 | |
|  * Silicon Graphics Computer Systems, Inc.
 | |
|  *
 | |
|  * Permission to use, copy, modify, distribute and sell this software
 | |
|  * and its documentation for any purpose is hereby granted without fee,
 | |
|  * provided that the above copyright notice appear in all copies and
 | |
|  * that both that copyright notice and this permission notice appear
 | |
|  * in supporting documentation.  Silicon Graphics makes no
 | |
|  * representations about the suitability of this software for any
 | |
|  * purpose.  It is provided "as is" without express or implied warranty.
 | |
|  */
 | |
| 
 | |
| /* NOTE: This is an internal header file, included by other STL headers.
 | |
|  *   You should not attempt to use it directly.
 | |
|  */
 | |
| 
 | |
| #ifndef _CPP_BITS_STL_CONSTRUCT_H
 | |
| #define _CPP_BITS_STL_CONSTRUCT_H 1
 | |
| 
 | |
| #include <new>
 | |
| 
 | |
| namespace std
 | |
| {
 | |
| 
 | |
| // construct and destroy.  These functions are not part of the C++ standard,
 | |
| // and are provided for backward compatibility with the HP STL. We also
 | |
| // provide internal names _Construct and _Destroy that can be used within
 | |
| // the library, so that standard-conforming pieces don't have to rely on
 | |
| // non-standard extensions.
 | |
| 
 | |
| // Internal names
 | |
| 
 | |
| template <class _T1, class _T2>
 | |
| inline void _Construct(_T1* __p, const _T2& __value) {
 | |
| new ((void*) __p) _T1(__value);
 | |
| }
 | |
|   
 | |
| template <class _T1>
 | |
| inline void _Construct(_T1* __p) {
 | |
|   new ((void*) __p) _T1();
 | |
| }
 | |
| 
 | |
| template <class _Tp>
 | |
| inline void _Destroy(_Tp* __pointer) {
 | |
|   __pointer->~_Tp();
 | |
| }
 | |
|   
 | |
| template <class _ForwardIterator>
 | |
| void
 | |
| __destroy_aux(_ForwardIterator __first, _ForwardIterator __last, __false_type)
 | |
| {
 | |
|   for ( ; __first != __last; ++__first)
 | |
|     destroy(&*__first);
 | |
| }
 | |
| 
 | |
| template <class _ForwardIterator> 
 | |
| inline void __destroy_aux(_ForwardIterator, _ForwardIterator, __true_type) {}
 | |
| 
 | |
| template <class _ForwardIterator, class _Tp>
 | |
| inline void 
 | |
| __destroy(_ForwardIterator __first, _ForwardIterator __last, _Tp*)
 | |
| {
 | |
|   typedef typename __type_traits<_Tp>::has_trivial_destructor
 | |
|           _Trivial_destructor;
 | |
|   __destroy_aux(__first, __last, _Trivial_destructor());
 | |
| }
 | |
| 
 | |
| template <class _ForwardIterator>
 | |
| inline void _Destroy(_ForwardIterator __first, _ForwardIterator __last) {
 | |
|   __destroy(__first, __last, __VALUE_TYPE(__first));
 | |
| }
 | |
| 
 | |
| inline void _Destroy(char*, char*) {}
 | |
| inline void _Destroy(int*, int*) {}
 | |
| inline void _Destroy(long*, long*) {}
 | |
| inline void _Destroy(float*, float*) {}
 | |
| inline void _Destroy(double*, double*) {}
 | |
| inline void _Destroy(wchar_t*, wchar_t*) {}
 | |
| 
 | |
| // --------------------------------------------------
 | |
| // Old names from the HP STL.
 | |
| 
 | |
| template <class _T1, class _T2>
 | |
| inline void construct(_T1* __p, const _T2& __value) {
 | |
|   _Construct(__p, __value);
 | |
| }
 | |
| 
 | |
| template <class _T1>
 | |
| inline void construct(_T1* __p) {
 | |
|   _Construct(__p);
 | |
| }
 | |
| 
 | |
| template <class _Tp>
 | |
| inline void destroy(_Tp* __pointer) {
 | |
|   _Destroy(__pointer);
 | |
| }
 | |
| 
 | |
| template <class _ForwardIterator>
 | |
| inline void destroy(_ForwardIterator __first, _ForwardIterator __last) {
 | |
|   _Destroy(__first, __last);
 | |
| }
 | |
| 
 | |
| } // namespace std
 | |
| 
 | |
| #endif /* _CPP_BITS_STL_CONSTRUCT_H */
 | |
| 
 | |
| // Local Variables:
 | |
| // mode:C++
 | |
| // End:
 |