File indexing completed on 2026-05-03 08:13:35
0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef _LIBCPP___CXX03___MEMORY_DESTRUCT_N_H
0010 #define _LIBCPP___CXX03___MEMORY_DESTRUCT_N_H
0011
0012 #include <__cxx03/__config>
0013 #include <__cxx03/__type_traits/integral_constant.h>
0014 #include <__cxx03/__type_traits/is_trivially_destructible.h>
0015 #include <__cxx03/cstddef>
0016
0017 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
0018 # pragma GCC system_header
0019 #endif
0020
0021 _LIBCPP_BEGIN_NAMESPACE_STD
0022
0023 struct __destruct_n {
0024 private:
0025 size_t __size_;
0026
0027 template <class _Tp>
0028 _LIBCPP_HIDE_FROM_ABI void __process(_Tp* __p, false_type) _NOEXCEPT {
0029 for (size_t __i = 0; __i < __size_; ++__i, ++__p)
0030 __p->~_Tp();
0031 }
0032
0033 template <class _Tp>
0034 _LIBCPP_HIDE_FROM_ABI void __process(_Tp*, true_type) _NOEXCEPT {}
0035
0036 _LIBCPP_HIDE_FROM_ABI void __incr(false_type) _NOEXCEPT { ++__size_; }
0037 _LIBCPP_HIDE_FROM_ABI void __incr(true_type) _NOEXCEPT {}
0038
0039 _LIBCPP_HIDE_FROM_ABI void __set(size_t __s, false_type) _NOEXCEPT { __size_ = __s; }
0040 _LIBCPP_HIDE_FROM_ABI void __set(size_t, true_type) _NOEXCEPT {}
0041
0042 public:
0043 _LIBCPP_HIDE_FROM_ABI explicit __destruct_n(size_t __s) _NOEXCEPT : __size_(__s) {}
0044
0045 template <class _Tp>
0046 _LIBCPP_HIDE_FROM_ABI void __incr() _NOEXCEPT {
0047 __incr(integral_constant<bool, is_trivially_destructible<_Tp>::value>());
0048 }
0049
0050 template <class _Tp>
0051 _LIBCPP_HIDE_FROM_ABI void __set(size_t __s, _Tp*) _NOEXCEPT {
0052 __set(__s, integral_constant<bool, is_trivially_destructible<_Tp>::value>());
0053 }
0054
0055 template <class _Tp>
0056 _LIBCPP_HIDE_FROM_ABI void operator()(_Tp* __p) _NOEXCEPT {
0057 __process(__p, integral_constant<bool, is_trivially_destructible<_Tp>::value>());
0058 }
0059 };
0060
0061 _LIBCPP_END_NAMESPACE_STD
0062
0063 #endif