stl_cons.h
上传用户:nizebo
上传日期:2022-05-14
资源大小:882k
文件大小:4k
源码类别:

STL

开发平台:

Visual C++

  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. /* NOTE: This is an internal header file, included by other STL headers.
  27.  *   You should not attempt to use it directly.
  28.  */
  29. #ifndef __SGI_STL_INTERNAL_CONSTRUCT_H
  30. #define __SGI_STL_INTERNAL_CONSTRUCT_H
  31. #include <new.h>
  32. __STL_BEGIN_NAMESPACE
  33. // construct and destroy.  These functions are not part of the C++ standard,
  34. // and are provided for backward compatibility with the HP STL.  We also
  35. // provide internal names _Construct and _Destroy that can be used within
  36. // the library, so that standard-conforming pieces don't have to rely on
  37. // non-standard extensions.
  38. // Internal names
  39. template <class _T1, class _T2>
  40. inline void _Construct(_T1* __p, const _T2& __value) {
  41.   new ((void*) __p) _T1(__value);
  42. }
  43. template <class _T1>
  44. inline void _Construct(_T1* __p) {
  45.   new ((void*) __p) _T1();
  46. }
  47. template <class _Tp>
  48. inline void _Destroy(_Tp* __pointer) {
  49.   __pointer->~_Tp();
  50. }
  51. template <class _ForwardIterator>
  52. void
  53. __destroy_aux(_ForwardIterator __first, _ForwardIterator __last, __false_type)
  54. {
  55.   for ( ; __first != __last; ++__first)
  56.     destroy(&*__first);
  57. }
  58. template <class _ForwardIterator> 
  59. inline void __destroy_aux(_ForwardIterator, _ForwardIterator, __true_type) {}
  60. template <class _ForwardIterator, class _Tp>
  61. inline void 
  62. __destroy(_ForwardIterator __first, _ForwardIterator __last, _Tp*)
  63. {
  64.   typedef typename __type_traits<_Tp>::has_trivial_destructor
  65.           _Trivial_destructor;
  66.   __destroy_aux(__first, __last, _Trivial_destructor());
  67. }
  68. template <class _ForwardIterator>
  69. inline void _Destroy(_ForwardIterator __first, _ForwardIterator __last) {
  70.   __destroy(__first, __last, __VALUE_TYPE(__first));
  71. }
  72. inline void _Destroy(char*, char*) {}
  73. inline void _Destroy(int*, int*) {}
  74. inline void _Destroy(long*, long*) {}
  75. inline void _Destroy(float*, float*) {}
  76. inline void _Destroy(double*, double*) {}
  77. #ifdef __STL_HAS_WCHAR_T
  78. inline void _Destroy(wchar_t*, wchar_t*) {}
  79. #endif /* __STL_HAS_WCHAR_T */
  80. // --------------------------------------------------
  81. // Old names from the HP STL.
  82. template <class _T1, class _T2>
  83. inline void construct(_T1* __p, const _T2& __value) {
  84.   _Construct(__p, __value);
  85. }
  86. template <class _T1>
  87. inline void construct(_T1* __p) {
  88.   _Construct(__p);
  89. }
  90. template <class _Tp>
  91. inline void destroy(_Tp* __pointer) {
  92.   _Destroy(__pointer);
  93. }
  94. template <class _ForwardIterator>
  95. inline void destroy(_ForwardIterator __first, _ForwardIterator __last) {
  96.   _Destroy(__first, __last);
  97. }
  98. __STL_END_NAMESPACE
  99. #endif /* __SGI_STL_INTERNAL_CONSTRUCT_H */
  100. // Local Variables:
  101. // mode:C++
  102. // End: