| /* |
| * |
| * 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 __SGI_STL_INTERNAL_CONSTRUCT_H |
| #define __SGI_STL_INTERNAL_CONSTRUCT_H |
| |
| #include <new.h> |
| |
| __STL_BEGIN_NAMESPACE |
| |
| // construct and destroy. These functions are not part of the C++ standard, |
| // and are provided for backward compatibility with the HP STL. |
| |
| template <class _Tp> |
| inline void destroy(_Tp* __pointer) { |
| __pointer->~_Tp(); |
| } |
| |
| template <class _T1, class _T2> |
| inline void construct(_T1* __p, const _T2& __value) { |
| new (__p) _T1(__value); |
| } |
| |
| template <class _T1> |
| inline void construct(_T1* __p) { |
| new (__p) _T1(); |
| } |
| |
| template <class _ForwardIterator> |
| inline 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(wchar_t*, wchar_t*) {} |
| |
| __STL_END_NAMESPACE |
| |
| #endif /* __SGI_STL_INTERNAL_CONSTRUCT_H */ |
| |
| // Local Variables: |
| // mode:C++ |
| // End: |