stl_construct.h
上传用户:kellyonhid
上传日期:2013-10-12
资源大小:932k
文件大小:3k
源码类别:

3D图形编程

开发平台:

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.
  35. template <class _T>
  36. inline void destroy(_T* __pointer) {
  37.   __pointer->~_T();
  38. }
  39. template <class _T1, class _T2>
  40. inline void construct(_T1* __p, const _T2& __value) {
  41.   new (__p) _T1(__value);
  42. }
  43. template <class _T1>
  44. inline void construct(_T1* __p) {
  45.   new (__p) _T1();
  46. }
  47. template <class _ForwardIterator>
  48. inline void
  49. __destroy_aux(_ForwardIterator __first, _ForwardIterator __last, __false_type)
  50. {
  51.   for ( ; __first < __last; ++__first)
  52.     destroy(&*__first);
  53. }
  54. template <class _ForwardIterator> 
  55. inline void __destroy_aux(_ForwardIterator, _ForwardIterator, __true_type) {}
  56. template <class _ForwardIterator, class _T>
  57. inline void 
  58. __destroy(_ForwardIterator __first, _ForwardIterator __last, _T*)
  59. {
  60.   typedef typename __type_traits<_T>::has_trivial_destructor
  61.           _Trivial_destructor;
  62.   __destroy_aux(__first, __last, _Trivial_destructor());
  63. }
  64. template <class _ForwardIterator>
  65. inline void destroy(_ForwardIterator __first, _ForwardIterator __last) {
  66.   __destroy(__first, __last, __VALUE_TYPE(__first));
  67. }
  68. inline void destroy(char*, char*) {}
  69. inline void destroy(wchar_t*, wchar_t*) {}
  70. __STL_END_NAMESPACE
  71. #endif /* __SGI_STL_INTERNAL_CONSTRUCT_H */
  72. // Local Variables:
  73. // mode:C++
  74. // End: