home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 November / PCWorld_2000-11_cd.bin / Software / Topware / devc40 / _SETUP.6 / Group14 / stl_construct.h < prev    next >
C/C++ Source or Header  |  2000-01-21  |  3KB  |  91 lines

  1. /*
  2.  *
  3.  * Copyright (c) 1994
  4.  * Hewlett-Packard Company
  5.  *
  6.  * Permission to use, copy, modify, distribute and sell this software
  7.  * and its documentation for any purpose is hereby granted without fee,
  8.  * provided that the above copyright notice appear in all copies and
  9.  * that both that copyright notice and this permission notice appear
  10.  * in supporting documentation.  Hewlett-Packard Company makes no
  11.  * representations about the suitability of this software for any
  12.  * purpose.  It is provided "as is" without express or implied warranty.
  13.  *
  14.  *
  15.  * Copyright (c) 1996,1997
  16.  * Silicon Graphics Computer Systems, Inc.
  17.  *
  18.  * Permission to use, copy, modify, distribute and sell this software
  19.  * and its documentation for any purpose is hereby granted without fee,
  20.  * provided that the above copyright notice appear in all copies and
  21.  * that both that copyright notice and this permission notice appear
  22.  * in supporting documentation.  Silicon Graphics makes no
  23.  * representations about the suitability of this software for any
  24.  * purpose.  It is provided "as is" without express or implied warranty.
  25.  */
  26.  
  27. /* NOTE: This is an internal header file, included by other STL headers.
  28.  *   You should not attempt to use it directly.
  29.  */
  30.  
  31. #ifndef __SGI_STL_INTERNAL_CONSTRUCT_H
  32. #define __SGI_STL_INTERNAL_CONSTRUCT_H
  33.  
  34. #include <new.h>
  35.  
  36. __STL_BEGIN_NAMESPACE
  37.  
  38. // construct and destroy.  These functions are not part of the C++ standard,
  39. // and are provided for backward compatibility with the HP STL.
  40.  
  41. template <class _Tp>
  42. inline void destroy(_Tp* __pointer) {
  43.   __pointer->~_Tp();
  44. }
  45.  
  46. template <class _T1, class _T2>
  47. inline void construct(_T1* __p, const _T2& __value) {
  48.   new (__p) _T1(__value);
  49. }
  50.  
  51. template <class _T1>
  52. inline void construct(_T1* __p) {
  53.   new (__p) _T1();
  54. }
  55.  
  56. template <class _ForwardIterator>
  57. inline void
  58. __destroy_aux(_ForwardIterator __first, _ForwardIterator __last, __false_type)
  59. {
  60.   for ( ; __first != __last; ++__first)
  61.     destroy(&*__first);
  62. }
  63.  
  64. template <class _ForwardIterator>
  65. inline void __destroy_aux(_ForwardIterator, _ForwardIterator, __true_type) {}
  66.  
  67. template <class _ForwardIterator, class _Tp>
  68. inline void
  69. __destroy(_ForwardIterator __first, _ForwardIterator __last, _Tp*)
  70. {
  71.   typedef typename __type_traits<_Tp>::has_trivial_destructor
  72.           _Trivial_destructor;
  73.   __destroy_aux(__first, __last, _Trivial_destructor());
  74. }
  75.  
  76. template <class _ForwardIterator>
  77. inline void destroy(_ForwardIterator __first, _ForwardIterator __last) {
  78.   __destroy(__first, __last, __VALUE_TYPE(__first));
  79. }
  80.  
  81. inline void destroy(char*, char*) {}
  82. inline void destroy(wchar_t*, wchar_t*) {}
  83.  
  84. __STL_END_NAMESPACE
  85.  
  86. #endif /* __SGI_STL_INTERNAL_CONSTRUCT_H */
  87.  
  88. // Local Variables:
  89. // mode:C++
  90. // End:
  91.