diff options
| author | Richard Qin <richard.qin.x@gmail.com> | 2026-10-16 02:39:56 +0800 |
|---|---|---|
| committer | Richard Qin <richard.qin.x@gmail.com> | 2026-10-16 02:39:56 +0800 |
| commit | 8cace3f05003c6cb4d38c36890055f03151c2ad4 (patch) | |
| tree | aa739deaac0266f17c4e91b333957501cb1ea2e9 /third_party/libcxx/include/c++/v1/experimental | |
| parent | 3ad39e9878310e5317ee73c9b353c1e2c1c5c4ee (diff) | |
| download | lume-8cace3f05003c6cb4d38c36890055f03151c2ad4.tar.gz lume-8cace3f05003c6cb4d38c36890055f03151c2ad4.tar.xz | |
Remove old code
Signed-off-by: Richard Qin <richard.qin.x@gmail.com>
Diffstat (limited to 'third_party/libcxx/include/c++/v1/experimental')
15 files changed, 0 insertions, 2170 deletions
diff --git a/third_party/libcxx/include/c++/v1/experimental/__simd/aligned_tag.h b/third_party/libcxx/include/c++/v1/experimental/__simd/aligned_tag.h deleted file mode 100644 index d208bf5..0000000 --- a/third_party/libcxx/include/c++/v1/experimental/__simd/aligned_tag.h +++ /dev/null @@ -1,75 +0,0 @@ -// -*- C++ -*- -//===----------------------------------------------------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -#ifndef _LIBCPP_EXPERIMENTAL___SIMD_ALIGNED_TAG_H -#define _LIBCPP_EXPERIMENTAL___SIMD_ALIGNED_TAG_H - -#include <__config> -#include <__cstddef/size_t.h> -#include <__memory/assume_aligned.h> -#include <__type_traits/remove_const.h> -#include <experimental/__simd/traits.h> - -#if _LIBCPP_STD_VER >= 17 && defined(_LIBCPP_ENABLE_EXPERIMENTAL) - -_LIBCPP_BEGIN_NAMESPACE_EXPERIMENTAL -inline namespace parallelism_v2 { -// memory alignment -struct element_aligned_tag { - template <class _Tp, class _Up = typename _Tp::value_type> - static constexpr size_t __alignment = alignof(_Up); - - template <class _Tp, class _Up> - static _LIBCPP_HIDE_FROM_ABI constexpr _Up* __apply(_Up* __ptr) { - return __ptr; - } -}; - -template <> -inline constexpr bool is_simd_flag_type_v<element_aligned_tag> = true; - -struct vector_aligned_tag { - template <class _Tp, class _Up = typename _Tp::value_type> - static constexpr size_t __alignment = memory_alignment_v<_Tp, remove_const_t<_Up>>; - - template <class _Tp, class _Up> - static _LIBCPP_HIDE_FROM_ABI constexpr _Up* __apply(_Up* __ptr) { - return std::__assume_aligned<__alignment<_Tp, _Up>, _Up>(__ptr); - } -}; - -template <> -inline constexpr bool is_simd_flag_type_v<vector_aligned_tag> = true; - -template <size_t _Np> -struct overaligned_tag { - template <class _Tp, class _Up = typename _Tp::value_type> - static constexpr size_t __alignment = _Np; - - template <class _Tp, class _Up> - static _LIBCPP_HIDE_FROM_ABI constexpr _Up* __apply(_Up* __ptr) { - return std::__assume_aligned<__alignment<_Tp, _Up>, _Up>(__ptr); - } -}; - -template <size_t _Np> -inline constexpr bool is_simd_flag_type_v<overaligned_tag<_Np>> = true; - -inline constexpr element_aligned_tag element_aligned{}; - -inline constexpr vector_aligned_tag vector_aligned{}; - -template <size_t _Np> -inline constexpr overaligned_tag<_Np> overaligned{}; - -} // namespace parallelism_v2 -_LIBCPP_END_NAMESPACE_EXPERIMENTAL - -#endif // _LIBCPP_STD_VER >= 17 && defined(_LIBCPP_ENABLE_EXPERIMENTAL) -#endif // _LIBCPP_EXPERIMENTAL___SIMD_ALIGNED_TAG_H diff --git a/third_party/libcxx/include/c++/v1/experimental/__simd/declaration.h b/third_party/libcxx/include/c++/v1/experimental/__simd/declaration.h deleted file mode 100644 index d9395ba..0000000 --- a/third_party/libcxx/include/c++/v1/experimental/__simd/declaration.h +++ /dev/null @@ -1,88 +0,0 @@ -// -*- C++ -*- -//===----------------------------------------------------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -#ifndef _LIBCPP_EXPERIMENTAL___SIMD_DECLARATION_H -#define _LIBCPP_EXPERIMENTAL___SIMD_DECLARATION_H - -#include <__config> -#include <__cstddef/size_t.h> - -#if _LIBCPP_STD_VER >= 17 && defined(_LIBCPP_ENABLE_EXPERIMENTAL) - -// TODO: support more targets -# if defined(__AVX__) -# define _LIBCPP_NATIVE_SIMD_WIDTH_IN_BYTES 32 -# else -# define _LIBCPP_NATIVE_SIMD_WIDTH_IN_BYTES 16 -# endif - -_LIBCPP_BEGIN_NAMESPACE_EXPERIMENTAL -inline namespace parallelism_v2 { -namespace simd_abi { -template <int> -struct __vec_ext; -struct __scalar; - -using scalar = __scalar; - -// TODO: make this platform dependent -template <int _Np> -using fixed_size = __vec_ext<_Np>; - -template <class _Tp> -inline constexpr int max_fixed_size = 32; - -// TODO: make this platform dependent -template <class _Tp> -using compatible = __vec_ext<16 / sizeof(_Tp)>; - -// TODO: make this platform dependent -template <class _Tp> -using native = __vec_ext<_LIBCPP_NATIVE_SIMD_WIDTH_IN_BYTES / sizeof(_Tp)>; - -// TODO: make this platform dependent -template <class _Tp, size_t _Np, class... _Abis> -struct deduce { - using type _LIBCPP_NODEBUG = fixed_size<_Np>; -}; - -// TODO: make this platform dependent -template <class _Tp, size_t _Np, class... _Abis> -using deduce_t = typename deduce<_Tp, _Np, _Abis...>::type; - -} // namespace simd_abi - -template <class _Tp, class _Abi> -struct __simd_storage; - -template <class _Tp, class _Abi> -struct __mask_storage; - -template <class _Tp, class _Abi> -struct __simd_operations; - -template <class _Tp, class _Abi> -struct __mask_operations; - -struct element_aligned_tag; -struct vector_aligned_tag; -template <size_t> -struct overaligned_tag; - -template <class _Tp, class _Abi = simd_abi::compatible<_Tp>> -class simd; - -template <class _Tp, class _Abi = simd_abi::compatible<_Tp>> -class simd_mask; - -} // namespace parallelism_v2 -_LIBCPP_END_NAMESPACE_EXPERIMENTAL - -#endif // _LIBCPP_STD_VER >= 17 && defined(_LIBCPP_ENABLE_EXPERIMENTAL) -#endif // _LIBCPP_EXPERIMENTAL___SIMD_DECLARATION_H diff --git a/third_party/libcxx/include/c++/v1/experimental/__simd/reference.h b/third_party/libcxx/include/c++/v1/experimental/__simd/reference.h deleted file mode 100644 index b9fe962..0000000 --- a/third_party/libcxx/include/c++/v1/experimental/__simd/reference.h +++ /dev/null @@ -1,192 +0,0 @@ -// -*- C++ -*- -//===----------------------------------------------------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -#ifndef _LIBCPP_EXPERIMENTAL___SIMD_REFERENCE_H -#define _LIBCPP_EXPERIMENTAL___SIMD_REFERENCE_H - -#include <__config> -#include <__cstddef/size_t.h> -#include <__type_traits/enable_if.h> -#include <__type_traits/is_assignable.h> -#include <__type_traits/is_same.h> -#include <__utility/declval.h> -#include <__utility/forward.h> -#include <__utility/move.h> -#include <experimental/__simd/utility.h> - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -#if _LIBCPP_STD_VER >= 17 && defined(_LIBCPP_ENABLE_EXPERIMENTAL) - -_LIBCPP_BEGIN_NAMESPACE_EXPERIMENTAL -inline namespace parallelism_v2 { -template <class _Tp, class _Storage, class _Vp> -class __simd_reference { - template <class, class> - friend class simd; - template <class, class> - friend class simd_mask; - - _Storage& __s_; - size_t __idx_; - - _LIBCPP_HIDE_FROM_ABI __simd_reference(_Storage& __s, size_t __idx) : __s_(__s), __idx_(__idx) {} - - _LIBCPP_HIDE_FROM_ABI _Vp __get() const noexcept { return __s_.__get(__idx_); } - - _LIBCPP_HIDE_FROM_ABI void __set(_Vp __v) { - if constexpr (is_same_v<_Vp, bool>) - __s_.__set(__idx_, experimental::__set_all_bits<_Tp>(__v)); - else - __s_.__set(__idx_, __v); - } - -public: - using value_type = _Vp; - - __simd_reference() = delete; - __simd_reference(const __simd_reference&) = delete; - - _LIBCPP_HIDE_FROM_ABI operator value_type() const noexcept { return __get(); } - - template <class _Up, enable_if_t<is_assignable_v<value_type&, _Up&&>, int> = 0> - _LIBCPP_HIDE_FROM_ABI __simd_reference operator=(_Up&& __v) && noexcept { - __set(static_cast<value_type>(std::forward<_Up>(__v))); - return {__s_, __idx_}; - } - - // Note: This approach might not fully align with the specification, - // which might be a wording defect. (https://wg21.link/N4808 section 9.6.3) - template <class _Tp1, class _Storage1, class _Vp1> - friend void - swap(__simd_reference<_Tp1, _Storage1, _Vp1>&& __a, __simd_reference<_Tp1, _Storage1, _Vp1>&& __b) noexcept; - - template <class _Tp1, class _Storage1, class _Vp1> - friend void swap(_Vp1& __a, __simd_reference<_Tp1, _Storage1, _Vp1>&& __b) noexcept; - - template <class _Tp1, class _Storage1, class _Vp1> - friend void swap(__simd_reference<_Tp1, _Storage1, _Vp1>&& __a, _Vp1& __b) noexcept; - - template <class _Up, class = decltype(std::declval<value_type&>() += std::declval<_Up>())> - _LIBCPP_HIDE_FROM_ABI __simd_reference operator+=(_Up&& __v) && noexcept { - __set(__get() + static_cast<value_type>(std::forward<_Up>(__v))); - return {__s_, __idx_}; - } - - template <class _Up, class = decltype(std::declval<value_type&>() -= std::declval<_Up>())> - _LIBCPP_HIDE_FROM_ABI __simd_reference operator-=(_Up&& __v) && noexcept { - __set(__get() - static_cast<value_type>(std::forward<_Up>(__v))); - return {__s_, __idx_}; - } - - template <class _Up, class = decltype(std::declval<value_type&>() *= std::declval<_Up>())> - _LIBCPP_HIDE_FROM_ABI __simd_reference operator*=(_Up&& __v) && noexcept { - __set(__get() * static_cast<value_type>(std::forward<_Up>(__v))); - return {__s_, __idx_}; - } - - template <class _Up, class = decltype(std::declval<value_type&>() /= std::declval<_Up>())> - _LIBCPP_HIDE_FROM_ABI __simd_reference operator/=(_Up&& __v) && noexcept { - __set(__get() / static_cast<value_type>(std::forward<_Up>(__v))); - return {__s_, __idx_}; - } - - template <class _Up, class = decltype(std::declval<value_type&>() %= std::declval<_Up>())> - _LIBCPP_HIDE_FROM_ABI __simd_reference operator%=(_Up&& __v) && noexcept { - __set(__get() % static_cast<value_type>(std::forward<_Up>(__v))); - return {__s_, __idx_}; - } - - template <class _Up, class = decltype(std::declval<value_type&>() &= std::declval<_Up>())> - _LIBCPP_HIDE_FROM_ABI __simd_reference operator&=(_Up&& __v) && noexcept { - __set(__get() & static_cast<value_type>(std::forward<_Up>(__v))); - return {__s_, __idx_}; - } - - template <class _Up, class = decltype(std::declval<value_type&>() |= std::declval<_Up>())> - _LIBCPP_HIDE_FROM_ABI __simd_reference operator|=(_Up&& __v) && noexcept { - __set(__get() | static_cast<value_type>(std::forward<_Up>(__v))); - return {__s_, __idx_}; - } - - template <class _Up, class = decltype(std::declval<value_type&>() ^= std::declval<_Up>())> - _LIBCPP_HIDE_FROM_ABI __simd_reference operator^=(_Up&& __v) && noexcept { - __set(__get() ^ static_cast<value_type>(std::forward<_Up>(__v))); - return {__s_, __idx_}; - } - - template <class _Up, class = decltype(std::declval<value_type&>() <<= std::declval<_Up>())> - _LIBCPP_HIDE_FROM_ABI __simd_reference operator<<=(_Up&& __v) && noexcept { - __set(__get() << static_cast<value_type>(std::forward<_Up>(__v))); - return {__s_, __idx_}; - } - - template <class _Up, class = decltype(std::declval<value_type&>() >>= std::declval<_Up>())> - _LIBCPP_HIDE_FROM_ABI __simd_reference operator>>=(_Up&& __v) && noexcept { - __set(__get() >> static_cast<value_type>(std::forward<_Up>(__v))); - return {__s_, __idx_}; - } - - // Note: All legal vectorizable types support operator++/--. - // There doesn't seem to be a way to trigger the constraint. - // Therefore, no SFINAE check is added here. - __simd_reference _LIBCPP_HIDE_FROM_ABI operator++() && noexcept { - __set(__get() + 1); - return {__s_, __idx_}; - } - - value_type _LIBCPP_HIDE_FROM_ABI operator++(int) && noexcept { - auto __r = __get(); - __set(__get() + 1); - return __r; - } - - __simd_reference _LIBCPP_HIDE_FROM_ABI operator--() && noexcept { - __set(__get() - 1); - return {__s_, __idx_}; - } - - value_type _LIBCPP_HIDE_FROM_ABI operator--(int) && noexcept { - auto __r = __get(); - __set(__get() - 1); - return __r; - } -}; - -template <class _Tp, class _Storage, class _Vp> -_LIBCPP_HIDE_FROM_ABI void -swap(__simd_reference<_Tp, _Storage, _Vp>&& __a, __simd_reference<_Tp, _Storage, _Vp>&& __b) noexcept { - _Vp __tmp(std::move(__a)); - std::move(__a) = std::move(__b); - std::move(__b) = std::move(__tmp); -} - -template <class _Tp, class _Storage, class _Vp> -_LIBCPP_HIDE_FROM_ABI void swap(_Vp& __a, __simd_reference<_Tp, _Storage, _Vp>&& __b) noexcept { - _Vp __tmp(std::move(__a)); - __a = std::move(__b); - std::move(__b) = std::move(__tmp); -} - -template <class _Tp, class _Storage, class _Vp> -_LIBCPP_HIDE_FROM_ABI void swap(__simd_reference<_Tp, _Storage, _Vp>&& __a, _Vp& __b) noexcept { - _Vp __tmp(std::move(__a)); - std::move(__a) = std::move(__b); - __b = std::move(__tmp); -} - -} // namespace parallelism_v2 -_LIBCPP_END_NAMESPACE_EXPERIMENTAL - -#endif // _LIBCPP_STD_VER >= 17 && defined(_LIBCPP_ENABLE_EXPERIMENTAL) - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP_EXPERIMENTAL___SIMD_REFERENCE_H diff --git a/third_party/libcxx/include/c++/v1/experimental/__simd/scalar.h b/third_party/libcxx/include/c++/v1/experimental/__simd/scalar.h deleted file mode 100644 index 20c8b02..0000000 --- a/third_party/libcxx/include/c++/v1/experimental/__simd/scalar.h +++ /dev/null @@ -1,102 +0,0 @@ -// -*- C++ -*- -//===----------------------------------------------------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -#ifndef _LIBCPP_EXPERIMENTAL___SIMD_SCALAR_H -#define _LIBCPP_EXPERIMENTAL___SIMD_SCALAR_H - -#include <__assert> -#include <__config> -#include <__cstddef/size_t.h> -#include <__type_traits/integral_constant.h> -#include <experimental/__simd/declaration.h> -#include <experimental/__simd/traits.h> - -#if _LIBCPP_STD_VER >= 17 && defined(_LIBCPP_ENABLE_EXPERIMENTAL) - -_LIBCPP_BEGIN_NAMESPACE_EXPERIMENTAL -inline namespace parallelism_v2 { -namespace simd_abi { -struct __scalar { - static constexpr size_t __simd_size = 1; -}; -} // namespace simd_abi - -template <> -inline constexpr bool is_abi_tag_v<simd_abi::__scalar> = true; - -template <class _Tp> -struct __simd_storage<_Tp, simd_abi::__scalar> { - _Tp __data; - - _LIBCPP_HIDE_FROM_ABI _Tp __get([[maybe_unused]] size_t __idx) const noexcept { - _LIBCPP_ASSERT_UNCATEGORIZED(__idx == 0, "Index is out of bounds"); - return __data; - } - _LIBCPP_HIDE_FROM_ABI void __set([[maybe_unused]] size_t __idx, _Tp __v) noexcept { - _LIBCPP_ASSERT_UNCATEGORIZED(__idx == 0, "Index is out of bounds"); - __data = __v; - } -}; - -template <class _Tp> -struct __mask_storage<_Tp, simd_abi::__scalar> : __simd_storage<bool, simd_abi::__scalar> {}; - -template <class _Tp> -struct __simd_operations<_Tp, simd_abi::__scalar> { - using _SimdStorage _LIBCPP_NODEBUG = __simd_storage<_Tp, simd_abi::__scalar>; - using _MaskStorage _LIBCPP_NODEBUG = __mask_storage<_Tp, simd_abi::__scalar>; - - static _LIBCPP_HIDE_FROM_ABI _SimdStorage __broadcast(_Tp __v) noexcept { return {__v}; } - - template <class _Generator> - static _LIBCPP_HIDE_FROM_ABI _SimdStorage __generate(_Generator&& __g) noexcept { - return {__g(std::integral_constant<size_t, 0>())}; - } - - template <class _Up> - static _LIBCPP_HIDE_FROM_ABI void __load(_SimdStorage& __s, const _Up* __mem) noexcept { - __s.__data = static_cast<_Tp>(__mem[0]); - } - - template <class _Up> - static _LIBCPP_HIDE_FROM_ABI void __store(_SimdStorage __s, _Up* __mem) noexcept { - *__mem = static_cast<_Up>(__s.__data); - } - - static _LIBCPP_HIDE_FROM_ABI void __increment(_SimdStorage& __s) noexcept { ++__s.__data; } - - static _LIBCPP_HIDE_FROM_ABI void __decrement(_SimdStorage& __s) noexcept { --__s.__data; } - - static _LIBCPP_HIDE_FROM_ABI _MaskStorage __negate(_SimdStorage __s) noexcept { return {!__s.__data}; } - - static _LIBCPP_HIDE_FROM_ABI _SimdStorage __bitwise_not(_SimdStorage __s) noexcept { - return {static_cast<_Tp>(~__s.__data)}; - } - - static _LIBCPP_HIDE_FROM_ABI _SimdStorage __unary_minus(_SimdStorage __s) noexcept { - return {static_cast<_Tp>(-__s.__data)}; - } -}; - -template <class _Tp> -struct __mask_operations<_Tp, simd_abi::__scalar> { - using _MaskStorage _LIBCPP_NODEBUG = __mask_storage<_Tp, simd_abi::__scalar>; - - static _LIBCPP_HIDE_FROM_ABI _MaskStorage __broadcast(bool __v) noexcept { return {__v}; } - - static _LIBCPP_HIDE_FROM_ABI void __load(_MaskStorage& __s, const bool* __mem) noexcept { __s.__data = __mem[0]; } - - static _LIBCPP_HIDE_FROM_ABI void __store(_MaskStorage __s, bool* __mem) noexcept { __mem[0] = __s.__data; } -}; - -} // namespace parallelism_v2 -_LIBCPP_END_NAMESPACE_EXPERIMENTAL - -#endif // _LIBCPP_STD_VER >= 17 && defined(_LIBCPP_ENABLE_EXPERIMENTAL) -#endif // _LIBCPP_EXPERIMENTAL___SIMD_SCALAR_H diff --git a/third_party/libcxx/include/c++/v1/experimental/__simd/simd.h b/third_party/libcxx/include/c++/v1/experimental/__simd/simd.h deleted file mode 100644 index 2fd2b26..0000000 --- a/third_party/libcxx/include/c++/v1/experimental/__simd/simd.h +++ /dev/null @@ -1,155 +0,0 @@ -// -*- C++ -*- -//===----------------------------------------------------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -#ifndef _LIBCPP_EXPERIMENTAL___SIMD_SIMD_H -#define _LIBCPP_EXPERIMENTAL___SIMD_SIMD_H - -#include <__config> -#include <__cstddef/size_t.h> -#include <__type_traits/enable_if.h> -#include <__type_traits/is_integral.h> -#include <__type_traits/is_same.h> -#include <__type_traits/remove_cvref.h> -#include <__utility/forward.h> -#include <experimental/__simd/declaration.h> -#include <experimental/__simd/reference.h> -#include <experimental/__simd/traits.h> -#include <experimental/__simd/utility.h> - -#if _LIBCPP_STD_VER >= 17 && defined(_LIBCPP_ENABLE_EXPERIMENTAL) - -_LIBCPP_BEGIN_NAMESPACE_EXPERIMENTAL -inline namespace parallelism_v2 { - -template <class _Simd, class _Impl, bool> -class __simd_int_operators {}; - -template <class _Simd, class _Impl> -class __simd_int_operators<_Simd, _Impl, true> { -public: - // unary operators for integral _Tp - _LIBCPP_HIDE_FROM_ABI _Simd operator~() const noexcept { - return _Simd(_Impl::__bitwise_not((*static_cast<const _Simd*>(this)).__s_), _Simd::__storage_tag); - } -}; - -// class template simd [simd.class] -// TODO: implement simd class -template <class _Tp, class _Abi> -class simd : public __simd_int_operators<simd<_Tp, _Abi>, __simd_operations<_Tp, _Abi>, is_integral_v<_Tp>> { - using _Impl _LIBCPP_NODEBUG = __simd_operations<_Tp, _Abi>; - using _Storage _LIBCPP_NODEBUG = typename _Impl::_SimdStorage; - - _Storage __s_; - - friend class __simd_int_operators<simd, _Impl, true>; - -public: - using value_type = _Tp; - using reference = __simd_reference<_Tp, _Storage, value_type>; - using mask_type = simd_mask<_Tp, _Abi>; - using abi_type = _Abi; - - static _LIBCPP_HIDE_FROM_ABI constexpr size_t size() noexcept { return simd_size_v<value_type, abi_type>; } - - _LIBCPP_HIDE_FROM_ABI simd() noexcept = default; - - // explicit conversion from and to implementation-defined types - struct __storage_tag_t {}; - static constexpr __storage_tag_t __storage_tag{}; - explicit _LIBCPP_HIDE_FROM_ABI operator _Storage() const { return __s_; } - explicit _LIBCPP_HIDE_FROM_ABI simd(const _Storage& __s, __storage_tag_t) : __s_(__s) {} - - // broadcast constructor - template <class _Up, enable_if_t<__can_broadcast_v<value_type, __remove_cvref_t<_Up>>, int> = 0> - _LIBCPP_HIDE_FROM_ABI simd(_Up&& __v) noexcept : __s_(_Impl::__broadcast(static_cast<value_type>(__v))) {} - - // implicit type conversion constructor - template <class _Up, - enable_if_t<!is_same_v<_Up, _Tp> && is_same_v<abi_type, simd_abi::fixed_size<size()>> && - __is_non_narrowing_convertible_v<_Up, value_type>, - int> = 0> - _LIBCPP_HIDE_FROM_ABI simd(const simd<_Up, simd_abi::fixed_size<size()>>& __v) noexcept { - for (size_t __i = 0; __i < size(); __i++) { - (*this)[__i] = static_cast<value_type>(__v[__i]); - } - } - - // generator constructor - template <class _Generator, enable_if_t<__can_generate_v<value_type, _Generator, size()>, int> = 0> - explicit _LIBCPP_HIDE_FROM_ABI simd(_Generator&& __g) noexcept - : __s_(_Impl::__generate(std::forward<_Generator>(__g))) {} - - // load constructor - template <class _Up, class _Flags, enable_if_t<__is_vectorizable_v<_Up> && is_simd_flag_type_v<_Flags>, int> = 0> - _LIBCPP_HIDE_FROM_ABI simd(const _Up* __mem, _Flags) { - _Impl::__load(__s_, _Flags::template __apply<simd>(__mem)); - } - - // copy functions - template <class _Up, class _Flags, enable_if_t<__is_vectorizable_v<_Up> && is_simd_flag_type_v<_Flags>, int> = 0> - _LIBCPP_HIDE_FROM_ABI void copy_from(const _Up* __mem, _Flags) { - _Impl::__load(__s_, _Flags::template __apply<simd>(__mem)); - } - - template <class _Up, class _Flags, enable_if_t<__is_vectorizable_v<_Up> && is_simd_flag_type_v<_Flags>, int> = 0> - _LIBCPP_HIDE_FROM_ABI void copy_to(_Up* __mem, _Flags) const { - _Impl::__store(__s_, _Flags::template __apply<simd>(__mem)); - } - - // scalar access [simd.subscr] - _LIBCPP_HIDE_FROM_ABI reference operator[](size_t __i) noexcept { return reference(__s_, __i); } - _LIBCPP_HIDE_FROM_ABI value_type operator[](size_t __i) const noexcept { return __s_.__get(__i); } - - // simd unary operators - _LIBCPP_HIDE_FROM_ABI simd& operator++() noexcept { - _Impl::__increment(__s_); - return *this; - } - - _LIBCPP_HIDE_FROM_ABI simd operator++(int) noexcept { - simd __r = *this; - _Impl::__increment(__s_); - return __r; - } - - _LIBCPP_HIDE_FROM_ABI simd& operator--() noexcept { - _Impl::__decrement(__s_); - return *this; - } - - _LIBCPP_HIDE_FROM_ABI simd operator--(int) noexcept { - simd __r = *this; - _Impl::__decrement(__s_); - return __r; - } - - _LIBCPP_HIDE_FROM_ABI mask_type operator!() const noexcept { - return mask_type(_Impl::__negate(__s_), mask_type::__storage_tag); - } - - _LIBCPP_HIDE_FROM_ABI simd operator+() const noexcept { return *this; } - - _LIBCPP_HIDE_FROM_ABI simd operator-() const noexcept { return simd(_Impl::__unary_minus(__s_), __storage_tag); } -}; - -template <class _Tp, class _Abi> -inline constexpr bool is_simd_v<simd<_Tp, _Abi>> = true; - -template <class _Tp> -using native_simd = simd<_Tp, simd_abi::native<_Tp>>; - -template <class _Tp, int _Np> -using fixed_size_simd = simd<_Tp, simd_abi::fixed_size<_Np>>; - -} // namespace parallelism_v2 -_LIBCPP_END_NAMESPACE_EXPERIMENTAL - -#endif // _LIBCPP_STD_VER >= 17 && defined(_LIBCPP_ENABLE_EXPERIMENTAL) -#endif // _LIBCPP_EXPERIMENTAL___SIMD_SIMD_H diff --git a/third_party/libcxx/include/c++/v1/experimental/__simd/simd_mask.h b/third_party/libcxx/include/c++/v1/experimental/__simd/simd_mask.h deleted file mode 100644 index a117665..0000000 --- a/third_party/libcxx/include/c++/v1/experimental/__simd/simd_mask.h +++ /dev/null @@ -1,97 +0,0 @@ -// -*- C++ -*- -//===----------------------------------------------------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -#ifndef _LIBCPP_EXPERIMENTAL___SIMD_SIMD_MASK_H -#define _LIBCPP_EXPERIMENTAL___SIMD_SIMD_MASK_H - -#include <__config> -#include <__cstddef/size_t.h> -#include <__type_traits/enable_if.h> -#include <__type_traits/is_same.h> -#include <experimental/__simd/declaration.h> -#include <experimental/__simd/reference.h> -#include <experimental/__simd/traits.h> - -#if _LIBCPP_STD_VER >= 17 && defined(_LIBCPP_ENABLE_EXPERIMENTAL) - -_LIBCPP_BEGIN_NAMESPACE_EXPERIMENTAL -inline namespace parallelism_v2 { - -// class template simd_mask [simd.mask.class] -// TODO: implement simd_mask class -template <class _Tp, class _Abi> -class simd_mask { - using _Impl _LIBCPP_NODEBUG = __mask_operations<_Tp, _Abi>; - using _Storage _LIBCPP_NODEBUG = typename _Impl::_MaskStorage; - - _Storage __s_; - -public: - using value_type = bool; - using reference = __simd_reference<_Tp, _Storage, value_type>; - using simd_type = simd<_Tp, _Abi>; - using abi_type = _Abi; - - static _LIBCPP_HIDE_FROM_ABI constexpr size_t size() noexcept { return simd_type::size(); } - - _LIBCPP_HIDE_FROM_ABI simd_mask() noexcept = default; - - // explicit conversion from and to implementation-defined types - struct __storage_tag_t {}; - static constexpr __storage_tag_t __storage_tag{}; - explicit _LIBCPP_HIDE_FROM_ABI operator _Storage() const { return __s_; } - explicit _LIBCPP_HIDE_FROM_ABI simd_mask(const _Storage& __s, __storage_tag_t) : __s_(__s) {} - - // broadcast constructor - _LIBCPP_HIDE_FROM_ABI explicit simd_mask(value_type __v) noexcept : __s_(_Impl::__broadcast(__v)) {} - - // implicit type conversion constructor - template <class _Up, enable_if_t<!is_same_v<_Up, _Tp> && is_same_v<abi_type, simd_abi::fixed_size<size()>>, int> = 0> - _LIBCPP_HIDE_FROM_ABI simd_mask(const simd_mask<_Up, simd_abi::fixed_size<size()>>& __v) noexcept { - for (size_t __i = 0; __i < size(); __i++) { - (*this)[__i] = __v[__i]; - } - } - - // load constructor - template <class _Flags, enable_if_t<is_simd_flag_type_v<_Flags>, int> = 0> - _LIBCPP_HIDE_FROM_ABI simd_mask(const value_type* __mem, _Flags) { - _Impl::__load(__s_, _Flags::template __apply<simd_mask>(__mem)); - } - - // copy functions - template <class _Flags, enable_if_t<is_simd_flag_type_v<_Flags>, int> = 0> - _LIBCPP_HIDE_FROM_ABI void copy_from(const value_type* __mem, _Flags) { - _Impl::__load(__s_, _Flags::template __apply<simd_mask>(__mem)); - } - - template <class _Flags, enable_if_t<is_simd_flag_type_v<_Flags>, int> = 0> - _LIBCPP_HIDE_FROM_ABI void copy_to(value_type* __mem, _Flags) const { - _Impl::__store(__s_, _Flags::template __apply<simd_mask>(__mem)); - } - - // scalar access [simd.mask.subscr] - _LIBCPP_HIDE_FROM_ABI reference operator[](size_t __i) noexcept { return reference(__s_, __i); } - _LIBCPP_HIDE_FROM_ABI value_type operator[](size_t __i) const noexcept { return __s_.__get(__i); } -}; - -template <class _Tp, class _Abi> -inline constexpr bool is_simd_mask_v<simd_mask<_Tp, _Abi>> = true; - -template <class _Tp> -using native_simd_mask = simd_mask<_Tp, simd_abi::native<_Tp>>; - -template <class _Tp, int _Np> -using fixed_size_simd_mask = simd_mask<_Tp, simd_abi::fixed_size<_Np>>; - -} // namespace parallelism_v2 -_LIBCPP_END_NAMESPACE_EXPERIMENTAL - -#endif // _LIBCPP_STD_VER >= 17 && defined(_LIBCPP_ENABLE_EXPERIMENTAL) -#endif // _LIBCPP_EXPERIMENTAL___SIMD_SIMD_MASK_H diff --git a/third_party/libcxx/include/c++/v1/experimental/__simd/traits.h b/third_party/libcxx/include/c++/v1/experimental/__simd/traits.h deleted file mode 100644 index 0bcc2ee..0000000 --- a/third_party/libcxx/include/c++/v1/experimental/__simd/traits.h +++ /dev/null @@ -1,75 +0,0 @@ -// -*- C++ -*- -//===----------------------------------------------------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -#ifndef _LIBCPP_EXPERIMENTAL___SIMD_TRAITS_H -#define _LIBCPP_EXPERIMENTAL___SIMD_TRAITS_H - -#include <__bit/bit_ceil.h> -#include <__config> -#include <__cstddef/size_t.h> -#include <__type_traits/integral_constant.h> -#include <__type_traits/is_same.h> -#include <experimental/__simd/declaration.h> -#include <experimental/__simd/utility.h> - -#if _LIBCPP_STD_VER >= 17 && defined(_LIBCPP_ENABLE_EXPERIMENTAL) - -_LIBCPP_BEGIN_NAMESPACE_EXPERIMENTAL -inline namespace parallelism_v2 { - -// traits [simd.traits] -template <class _Tp> -inline constexpr bool is_abi_tag_v = false; - -template <class _Tp> -struct is_abi_tag : bool_constant<is_abi_tag_v<_Tp>> {}; - -template <class _Tp> -inline constexpr bool is_simd_v = false; - -template <class _Tp> -struct is_simd : bool_constant<is_simd_v<_Tp>> {}; - -template <class _Tp> -inline constexpr bool is_simd_mask_v = false; - -template <class _Tp> -struct is_simd_mask : bool_constant<is_simd_mask_v<_Tp>> {}; - -template <class _Tp> -inline constexpr bool is_simd_flag_type_v = false; - -template <class _Tp> -struct is_simd_flag_type : bool_constant<is_simd_flag_type_v<_Tp>> {}; - -template <class _Tp, class _Abi = simd_abi::compatible<_Tp>, bool = (__is_vectorizable_v<_Tp> && is_abi_tag_v<_Abi>)> -struct simd_size : integral_constant<size_t, _Abi::__simd_size> {}; - -template <class _Tp, class _Abi> -struct simd_size<_Tp, _Abi, false> {}; - -template <class _Tp, class _Abi = simd_abi::compatible<_Tp>> -inline constexpr size_t simd_size_v = simd_size<_Tp, _Abi>::value; - -template <class _Tp, - class _Up = typename _Tp::value_type, - bool = (is_simd_v<_Tp> && __is_vectorizable_v<_Up>) || (is_simd_mask_v<_Tp> && is_same_v<_Up, bool>)> -struct memory_alignment : integral_constant<size_t, std::__bit_ceil(sizeof(_Up) * _Tp::size())> {}; - -template <class _Tp, class _Up> -struct memory_alignment<_Tp, _Up, false> {}; - -template <class _Tp, class _Up = typename _Tp::value_type> -inline constexpr size_t memory_alignment_v = memory_alignment<_Tp, _Up>::value; - -} // namespace parallelism_v2 -_LIBCPP_END_NAMESPACE_EXPERIMENTAL - -#endif // _LIBCPP_STD_VER >= 17 && defined(_LIBCPP_ENABLE_EXPERIMENTAL) -#endif // _LIBCPP_EXPERIMENTAL___SIMD_TRAITS_H diff --git a/third_party/libcxx/include/c++/v1/experimental/__simd/utility.h b/third_party/libcxx/include/c++/v1/experimental/__simd/utility.h deleted file mode 100644 index 2af61e3..0000000 --- a/third_party/libcxx/include/c++/v1/experimental/__simd/utility.h +++ /dev/null @@ -1,103 +0,0 @@ -// -*- C++ -*- -//===----------------------------------------------------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -#ifndef _LIBCPP_EXPERIMENTAL___SIMD_UTILITY_H -#define _LIBCPP_EXPERIMENTAL___SIMD_UTILITY_H - -#include <__config> -#include <__cstddef/size_t.h> -#include <__type_traits/is_arithmetic.h> -#include <__type_traits/is_const.h> -#include <__type_traits/is_constant_evaluated.h> -#include <__type_traits/is_convertible.h> -#include <__type_traits/is_same.h> -#include <__type_traits/is_unsigned.h> -#include <__type_traits/is_volatile.h> -#include <__type_traits/void_t.h> -#include <__utility/declval.h> -#include <__utility/integer_sequence.h> -#include <cstdint> -#include <limits> - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -#if _LIBCPP_STD_VER >= 17 && defined(_LIBCPP_ENABLE_EXPERIMENTAL) - -_LIBCPP_BEGIN_NAMESPACE_EXPERIMENTAL -inline namespace parallelism_v2 { -template <class _Tp> -inline constexpr bool __is_vectorizable_v = - is_arithmetic_v<_Tp> && !is_const_v<_Tp> && !is_volatile_v<_Tp> && !is_same_v<_Tp, bool>; - -template <class _Tp> -_LIBCPP_HIDE_FROM_ABI auto __choose_mask_type() { - if constexpr (sizeof(_Tp) == 1) { - return uint8_t{}; - } else if constexpr (sizeof(_Tp) == 2) { - return uint16_t{}; - } else if constexpr (sizeof(_Tp) == 4) { - return uint32_t{}; - } else if constexpr (sizeof(_Tp) == 8) { - return uint64_t{}; - } -# if _LIBCPP_HAS_INT128 - else if constexpr (sizeof(_Tp) == 16) { - return __uint128_t{}; - } -# endif - else - static_assert(sizeof(_Tp) == 0, "Unexpected size"); -} - -template <class _Tp> -_LIBCPP_HIDE_FROM_ABI auto constexpr __set_all_bits(bool __v) { - return __v ? (numeric_limits<decltype(experimental::__choose_mask_type<_Tp>())>::max()) : 0; -} - -template <class _From, class _To, class = void> -inline constexpr bool __is_non_narrowing_convertible_v = false; - -template <class _From, class _To> -inline constexpr bool __is_non_narrowing_convertible_v<_From, _To, std::void_t<decltype(_To{std::declval<_From>()})>> = - true; - -template <class _Tp, class _Up> -inline constexpr bool __can_broadcast_v = - (__is_vectorizable_v<_Up> && __is_non_narrowing_convertible_v<_Up, _Tp>) || - (!__is_vectorizable_v<_Up> && is_convertible_v<_Up, _Tp>) || is_same_v<_Up, int> || - (is_same_v<_Up, unsigned int> && is_unsigned_v<_Tp>); - -template <class _Tp, class _Generator, std::size_t _Idx, class = void> -inline constexpr bool __is_well_formed = false; - -template <class _Tp, class _Generator, std::size_t _Idx> -inline constexpr bool - __is_well_formed<_Tp, - _Generator, - _Idx, - std::void_t<decltype(std::declval<_Generator>()(integral_constant<size_t, _Idx>()))>> = - __can_broadcast_v<_Tp, decltype(std::declval<_Generator>()(integral_constant<size_t, _Idx>()))>; - -template <class _Tp, class _Generator, std::size_t... _Idxes> -_LIBCPP_HIDE_FROM_ABI constexpr bool __can_generate(index_sequence<_Idxes...>) { - return (true && ... && __is_well_formed<_Tp, _Generator, _Idxes>); -} - -template <class _Tp, class _Generator, std::size_t _Size> -inline constexpr bool __can_generate_v = experimental::__can_generate<_Tp, _Generator>(make_index_sequence<_Size>()); - -} // namespace parallelism_v2 -_LIBCPP_END_NAMESPACE_EXPERIMENTAL - -#endif // _LIBCPP_STD_VER >= 17 && defined(_LIBCPP_ENABLE_EXPERIMENTAL) - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP_EXPERIMENTAL___SIMD_UTILITY_H diff --git a/third_party/libcxx/include/c++/v1/experimental/__simd/vec_ext.h b/third_party/libcxx/include/c++/v1/experimental/__simd/vec_ext.h deleted file mode 100644 index 2a4b8c7..0000000 --- a/third_party/libcxx/include/c++/v1/experimental/__simd/vec_ext.h +++ /dev/null @@ -1,130 +0,0 @@ -// -*- C++ -*- -//===----------------------------------------------------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -#ifndef _LIBCPP_EXPERIMENTAL___SIMD_VEC_EXT_H -#define _LIBCPP_EXPERIMENTAL___SIMD_VEC_EXT_H - -#include <__assert> -#include <__bit/bit_ceil.h> -#include <__config> -#include <__cstddef/size_t.h> -#include <__type_traits/integral_constant.h> -#include <__utility/forward.h> -#include <__utility/integer_sequence.h> -#include <experimental/__simd/declaration.h> -#include <experimental/__simd/traits.h> -#include <experimental/__simd/utility.h> - -#if _LIBCPP_STD_VER >= 17 && defined(_LIBCPP_ENABLE_EXPERIMENTAL) - -_LIBCPP_BEGIN_NAMESPACE_EXPERIMENTAL -inline namespace parallelism_v2 { -namespace simd_abi { -template <int _Np> -struct __vec_ext { - static constexpr size_t __simd_size = _Np; -}; -} // namespace simd_abi - -template <int _Np> -inline constexpr bool is_abi_tag_v<simd_abi::__vec_ext<_Np>> = _Np > 0 && _Np <= 32; - -template <class _Tp, int _Np> -struct __simd_storage<_Tp, simd_abi::__vec_ext<_Np>> { - _Tp __data __attribute__((__vector_size__(std::__bit_ceil((sizeof(_Tp) * _Np))))); - - _LIBCPP_HIDE_FROM_ABI _Tp __get(size_t __idx) const noexcept { - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS(__idx < _Np, "Index is out of bounds"); - return __data[__idx]; - } - _LIBCPP_HIDE_FROM_ABI void __set(size_t __idx, _Tp __v) noexcept { - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS(__idx < _Np, "Index is out of bounds"); - __data[__idx] = __v; - } -}; - -template <class _Tp, int _Np> -struct __mask_storage<_Tp, simd_abi::__vec_ext<_Np>> - : __simd_storage<decltype(experimental::__choose_mask_type<_Tp>()), simd_abi::__vec_ext<_Np>> {}; - -template <class _Tp, int _Np> -struct __simd_operations<_Tp, simd_abi::__vec_ext<_Np>> { - using _SimdStorage _LIBCPP_NODEBUG = __simd_storage<_Tp, simd_abi::__vec_ext<_Np>>; - using _MaskStorage _LIBCPP_NODEBUG = __mask_storage<_Tp, simd_abi::__vec_ext<_Np>>; - - static _LIBCPP_HIDE_FROM_ABI _SimdStorage __broadcast(_Tp __v) noexcept { - _SimdStorage __result; - for (int __i = 0; __i < _Np; ++__i) { - __result.__set(__i, __v); - } - return __result; - } - - template <class _Generator, size_t... _Is> - static _LIBCPP_HIDE_FROM_ABI _SimdStorage __generate_init(_Generator&& __g, std::index_sequence<_Is...>) { - return _SimdStorage{{__g(std::integral_constant<size_t, _Is>())...}}; - } - - template <class _Generator> - static _LIBCPP_HIDE_FROM_ABI _SimdStorage __generate(_Generator&& __g) noexcept { - return __generate_init(std::forward<_Generator>(__g), std::make_index_sequence<_Np>()); - } - - template <class _Up> - static _LIBCPP_HIDE_FROM_ABI void __load(_SimdStorage& __s, const _Up* __mem) noexcept { - for (size_t __i = 0; __i < _Np; __i++) - __s.__data[__i] = static_cast<_Tp>(__mem[__i]); - } - - template <class _Up> - static _LIBCPP_HIDE_FROM_ABI void __store(_SimdStorage __s, _Up* __mem) noexcept { - for (size_t __i = 0; __i < _Np; __i++) - __mem[__i] = static_cast<_Up>(__s.__data[__i]); - } - - static _LIBCPP_HIDE_FROM_ABI void __increment(_SimdStorage& __s) noexcept { __s.__data = __s.__data + 1; } - - static _LIBCPP_HIDE_FROM_ABI void __decrement(_SimdStorage& __s) noexcept { __s.__data = __s.__data - 1; } - - static _LIBCPP_HIDE_FROM_ABI _MaskStorage __negate(_SimdStorage __s) noexcept { return {!__s.__data}; } - - static _LIBCPP_HIDE_FROM_ABI _SimdStorage __bitwise_not(_SimdStorage __s) noexcept { return {~__s.__data}; } - - static _LIBCPP_HIDE_FROM_ABI _SimdStorage __unary_minus(_SimdStorage __s) noexcept { return {-__s.__data}; } -}; - -template <class _Tp, int _Np> -struct __mask_operations<_Tp, simd_abi::__vec_ext<_Np>> { - using _MaskStorage _LIBCPP_NODEBUG = __mask_storage<_Tp, simd_abi::__vec_ext<_Np>>; - - static _LIBCPP_HIDE_FROM_ABI _MaskStorage __broadcast(bool __v) noexcept { - _MaskStorage __result; - auto __all_bits_v = experimental::__set_all_bits<_Tp>(__v); - for (int __i = 0; __i < _Np; ++__i) { - __result.__set(__i, __all_bits_v); - } - return __result; - } - - static _LIBCPP_HIDE_FROM_ABI void __load(_MaskStorage& __s, const bool* __mem) noexcept { - for (size_t __i = 0; __i < _Np; __i++) - __s.__data[__i] = experimental::__set_all_bits<_Tp>(__mem[__i]); - } - - static _LIBCPP_HIDE_FROM_ABI void __store(_MaskStorage __s, bool* __mem) noexcept { - for (size_t __i = 0; __i < _Np; __i++) - __mem[__i] = static_cast<bool>(__s.__data[__i]); - } -}; - -} // namespace parallelism_v2 -_LIBCPP_END_NAMESPACE_EXPERIMENTAL - -#endif // _LIBCPP_STD_VER >= 17 && defined(_LIBCPP_ENABLE_EXPERIMENTAL) -#endif // _LIBCPP_EXPERIMENTAL___SIMD_VEC_EXT_H diff --git a/third_party/libcxx/include/c++/v1/experimental/iterator b/third_party/libcxx/include/c++/v1/experimental/iterator deleted file mode 100644 index 0ed9518..0000000 --- a/third_party/libcxx/include/c++/v1/experimental/iterator +++ /dev/null @@ -1,140 +0,0 @@ -// -*- C++ -*- -//===----------------------------------------------------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -#ifndef _LIBCPP_EXPERIMENTAL_ITERATOR -#define _LIBCPP_EXPERIMENTAL_ITERATOR - -/* -namespace std { - namespace experimental { - inline namespace fundamentals_v2 { - - template <class DelimT, class charT = char, class traits = char_traits<charT>> - class ostream_joiner { - public: - typedef charT char_type; - typedef traits traits_type; - typedef basic_ostream<charT, traits> ostream_type; - typedef output_iterator_tag iterator_category; - typedef void value_type; - typedef void difference_type; - typedef void pointer; - typedef void reference; - - ostream_joiner(ostream_type& s, const DelimT& delimiter); - ostream_joiner(ostream_type& s, DelimT&& delimiter); - - template<typename T> - ostream_joiner& operator=(const T& value); - - ostream_joiner& operator*() noexcept; - ostream_joiner& operator++() noexcept; - ostream_joiner& operator++(int) noexcept; - private: - ostream_type* out_stream; // exposition only - DelimT delim; // exposition only - bool first_element; // exposition only - }; - - template <class charT, class traits, class DelimT> - ostream_joiner<decay_t<DelimT>, charT, traits> - make_ostream_joiner(basic_ostream<charT, traits>& os, DelimT&& delimiter); - - } // inline namespace fundamentals_v2 - } // namespace experimental -} // namespace std - -*/ - -#if __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS) -# include <__cxx03/__config> -#else -# include <__config> -# include <__memory/addressof.h> -# include <__ostream/basic_ostream.h> -# include <__string/char_traits.h> -# include <__type_traits/decay.h> -# include <__utility/forward.h> -# include <__utility/move.h> -# include <iterator> - -# if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -# endif - -_LIBCPP_PUSH_MACROS -# include <__undef_macros> - -# if _LIBCPP_STD_VER >= 14 - -_LIBCPP_BEGIN_NAMESPACE_LFTS - -template <class _Delim, class _CharT = char, class _Traits = char_traits<_CharT>> -class ostream_joiner { -public: - typedef _CharT char_type; - typedef _Traits traits_type; - typedef basic_ostream<char_type, traits_type> ostream_type; - typedef output_iterator_tag iterator_category; - typedef void value_type; - typedef void difference_type; - typedef void pointer; - typedef void reference; - - _LIBCPP_HIDE_FROM_ABI ostream_joiner(ostream_type& __os, _Delim&& __d) - : __output_iter_(std::addressof(__os)), __delim_(std::move(__d)), __first_(true) {} - - _LIBCPP_HIDE_FROM_ABI ostream_joiner(ostream_type& __os, const _Delim& __d) - : __output_iter_(std::addressof(__os)), __delim_(__d), __first_(true) {} - - template <typename _Tp> - _LIBCPP_HIDE_FROM_ABI ostream_joiner& operator=(const _Tp& __v) { - if (!__first_) - *__output_iter_ << __delim_; - __first_ = false; - *__output_iter_ << __v; - return *this; - } - - _LIBCPP_HIDE_FROM_ABI ostream_joiner& operator*() _NOEXCEPT { return *this; } - _LIBCPP_HIDE_FROM_ABI ostream_joiner& operator++() _NOEXCEPT { return *this; } - _LIBCPP_HIDE_FROM_ABI ostream_joiner& operator++(int) _NOEXCEPT { return *this; } - -private: - ostream_type* __output_iter_; - _Delim __delim_; - bool __first_; -}; - -template <class _CharT, class _Traits, class _Delim> -_LIBCPP_HIDE_FROM_ABI ostream_joiner<__decay_t<_Delim>, _CharT, _Traits> -make_ostream_joiner(basic_ostream<_CharT, _Traits>& __os, _Delim&& __d) { - return ostream_joiner<__decay_t<_Delim>, _CharT, _Traits>(__os, std::forward<_Delim>(__d)); -} - -_LIBCPP_END_NAMESPACE_LFTS - -# endif // _LIBCPP_STD_VER >= 14 - -_LIBCPP_POP_MACROS - -# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20 -# include <cstddef> -# include <iosfwd> -# include <optional> -# include <type_traits> -# endif - -# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 23 -# include <locale> -# endif - -#endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS) - -#endif // _LIBCPP_EXPERIMENTAL_ITERATOR diff --git a/third_party/libcxx/include/c++/v1/experimental/memory b/third_party/libcxx/include/c++/v1/experimental/memory deleted file mode 100644 index ffbd8f3..0000000 --- a/third_party/libcxx/include/c++/v1/experimental/memory +++ /dev/null @@ -1,205 +0,0 @@ -// -*- C++ -*- -//===----------------------------------------------------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -#ifndef _LIBCPP_EXPERIMENTAL_MEMORY -#define _LIBCPP_EXPERIMENTAL_MEMORY - -/* - experimental/memory synopsis - -namespace std::experimental::inline fundamentals_v2 { - -template <class W> class observer_ptr { -public: - using element_type = W; - using pointer = add_pointer_t<W>; // exposition-only - using reference = add_lvalue_reference_t<W>; // exposition-only - - // default ctor - constexpr observer_ptr() noexcept; - - // pointer-accepting ctors - constexpr observer_ptr(nullptr_t) noexcept; - constexpr explicit observer_ptr(pointer) noexcept; - - // copying ctors (in addition to compiler-generated copy ctor) - template <class W2> constexpr observer_ptr(observer_ptr<W2>) noexcept; - - // observers - constexpr pointer get() const noexcept; - constexpr reference operator*() const; - constexpr pointer operator->() const noexcept; - constexpr explicit operator bool() const noexcept; - - // conversions - constexpr explicit operator pointer() const noexcept; - - // modifiers - constexpr pointer release() noexcept; - constexpr void reset(pointer = nullptr) noexcept; - constexpr void swap(observer_ptr&) noexcept; -}; - -} -*/ - -#if __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS) -# include <__cxx03/__config> -#else -# include <__config> -# include <__cstddef/nullptr_t.h> -# include <__cstddef/size_t.h> -# include <__functional/hash.h> -# include <__functional/operations.h> -# include <__type_traits/add_pointer.h> -# include <__type_traits/add_reference.h> -# include <__type_traits/common_type.h> -# include <__type_traits/enable_if.h> -# include <__type_traits/is_convertible.h> -# include <version> - -# if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -# endif - -# ifdef _LIBCPP_ENABLE_EXPERIMENTAL - -_LIBCPP_BEGIN_NAMESPACE_LFTS_V2 - -# if _LIBCPP_STD_VER >= 17 - -template <class _Wp> -class observer_ptr { -public: - using element_type = _Wp; - - // constructors - _LIBCPP_HIDE_FROM_ABI constexpr observer_ptr() noexcept : __ptr_(nullptr) {} - _LIBCPP_HIDE_FROM_ABI constexpr observer_ptr(nullptr_t) noexcept : __ptr_(nullptr) {} - _LIBCPP_HIDE_FROM_ABI constexpr explicit observer_ptr(element_type* __p) noexcept : __ptr_(__p) {} - - template <class _W2, __enable_if_t<is_convertible<_W2*, _Wp*>::value, int> = 0> - _LIBCPP_HIDE_FROM_ABI constexpr observer_ptr(observer_ptr<_W2> __other) noexcept : __ptr_(__other.get()) {} - - // observers - _LIBCPP_HIDE_FROM_ABI constexpr element_type* get() const noexcept { return __ptr_; } - _LIBCPP_HIDE_FROM_ABI constexpr add_lvalue_reference_t<_Wp> operator*() const { return *__ptr_; } - _LIBCPP_HIDE_FROM_ABI constexpr element_type* operator->() const noexcept { return __ptr_; } - _LIBCPP_HIDE_FROM_ABI constexpr explicit operator bool() const noexcept { return __ptr_ != nullptr; } - - // conversions - _LIBCPP_HIDE_FROM_ABI constexpr explicit operator element_type*() const noexcept { return __ptr_; } - - // modifiers - _LIBCPP_HIDE_FROM_ABI constexpr void reset(element_type* __p = nullptr) noexcept { __ptr_ = __p; } - _LIBCPP_HIDE_FROM_ABI constexpr void swap(observer_ptr& __other) noexcept { - observer_ptr __tmp = __other; - __other = *this; - *this = __tmp; - } - _LIBCPP_HIDE_FROM_ABI constexpr element_type* release() noexcept { - observer_ptr __p; - __p.swap(*this); - return __p.get(); - } - -private: - element_type* __ptr_; -}; - -// specializations - -template <class _Wp> -_LIBCPP_HIDE_FROM_ABI constexpr void swap(observer_ptr<_Wp>& __a, observer_ptr<_Wp>& __b) noexcept { - __a.swap(__b); -} - -template <class _Wp> -_LIBCPP_HIDE_FROM_ABI observer_ptr<_Wp> make_observer(_Wp* __ptr) noexcept { - return observer_ptr<_Wp>{__ptr}; -} - -template <class _W1, class _W2> -_LIBCPP_HIDE_FROM_ABI bool operator==(observer_ptr<_W1> __a, observer_ptr<_W2> __b) { - return __a.get() == __b.get(); -} - -template <class _W1, class _W2> -_LIBCPP_HIDE_FROM_ABI bool operator!=(observer_ptr<_W1> __a, observer_ptr<_W2> __b) { - return !(__a == __b); -} - -template <class _Wp> -_LIBCPP_HIDE_FROM_ABI bool operator==(observer_ptr<_Wp> __p, nullptr_t) { - return !__p; -} - -template <class _Wp> -_LIBCPP_HIDE_FROM_ABI bool operator==(nullptr_t, observer_ptr<_Wp> __p) { - return !__p; -} - -template <class _Wp> -_LIBCPP_HIDE_FROM_ABI bool operator!=(observer_ptr<_Wp> __p, nullptr_t) { - return (bool)__p; -} - -template <class _Wp> -_LIBCPP_HIDE_FROM_ABI bool operator!=(nullptr_t, observer_ptr<_Wp> __p) { - return (bool)__p; -} - -template <class _W1, class _W2> -_LIBCPP_HIDE_FROM_ABI bool operator<(observer_ptr<_W1> __a, observer_ptr<_W2> __b) { - return std::less<typename std::common_type<_W1*, _W2*>::type>()(__a.get(), __b.get()); -} - -template <class _W1, class _W2> -_LIBCPP_HIDE_FROM_ABI bool operator>(observer_ptr<_W1> __a, observer_ptr<_W2> __b) { - return __b < __a; -} - -template <class _W1, class _W2> -_LIBCPP_HIDE_FROM_ABI bool operator<=(observer_ptr<_W1> __a, observer_ptr<_W2> __b) { - return !(__a > __b); -} - -template <class _W1, class _W2> -_LIBCPP_HIDE_FROM_ABI bool operator>=(observer_ptr<_W1> __a, observer_ptr<_W2> __b) { - return !(__a < __b); -} - -# endif // _LIBCPP_STD_VER >= 17 - -_LIBCPP_END_NAMESPACE_LFTS_V2 - -_LIBCPP_BEGIN_NAMESPACE_STD - -// hash - -# if _LIBCPP_STD_VER >= 17 -template <class _Tp> -struct hash<experimental::observer_ptr<_Tp>> { - _LIBCPP_HIDE_FROM_ABI size_t operator()(const experimental::observer_ptr<_Tp>& __ptr) const noexcept { - return hash<_Tp*>()(__ptr.get()); - } -}; -# endif // _LIBCPP_STD_VER >= 17 - -_LIBCPP_END_NAMESPACE_STD - -# endif // _LIBCPP_ENABLE_EXPERIMENTAL - -# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20 -# include <cstddef> -# include <limits> -# endif -#endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS) - -#endif /* _LIBCPP_EXPERIMENTAL_MEMORY */ diff --git a/third_party/libcxx/include/c++/v1/experimental/propagate_const b/third_party/libcxx/include/c++/v1/experimental/propagate_const deleted file mode 100644 index 6a7f8ae..0000000 --- a/third_party/libcxx/include/c++/v1/experimental/propagate_const +++ /dev/null @@ -1,497 +0,0 @@ -// -*- C++ -*- -//===----------------------------------------------------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -#ifndef _LIBCPP_EXPERIMENTAL_PROPAGATE_CONST -#define _LIBCPP_EXPERIMENTAL_PROPAGATE_CONST - -/* - propagate_const synopsis - - namespace std { namespace experimental { inline namespace fundamentals_v2 { - - // [propagate_const] - template <class T> class propagate_const; - - // [propagate_const.underlying], underlying pointer access - constexpr const _Tp& get_underlying(const propagate_const<T>& pt) noexcept; - constexpr T& get_underlying(propagate_const<T>& pt) noexcept; - - // [propagate_const.relational], relational operators - template <class T> constexpr bool operator==(const propagate_const<T>& pt, nullptr_t); - template <class T> constexpr bool operator==(nullptr_t, const propagate_const<T>& pu); - template <class T> constexpr bool operator!=(const propagate_const<T>& pt, nullptr_t); - template <class T> constexpr bool operator!=(nullptr_t, const propagate_const<T>& pu); - template <class T, class U> constexpr bool operator==(const propagate_const<T>& pt, const propagate_const<_Up>& pu); - template <class T, class U> constexpr bool operator!=(const propagate_const<T>& pt, const propagate_const<_Up>& pu); - template <class T, class U> constexpr bool operator<(const propagate_const<T>& pt, const propagate_const<_Up>& pu); - template <class T, class U> constexpr bool operator>(const propagate_const<T>& pt, const propagate_const<_Up>& pu); - template <class T, class U> constexpr bool operator<=(const propagate_const<T>& pt, const propagate_const<_Up>& pu); - template <class T, class U> constexpr bool operator>=(const propagate_const<T>& pt, const propagate_const<_Up>& pu); - template <class T, class U> constexpr bool operator==(const propagate_const<T>& pt, const _Up& u); - template <class T, class U> constexpr bool operator!=(const propagate_const<T>& pt, const _Up& u); - template <class T, class U> constexpr bool operator<(const propagate_const<T>& pt, const _Up& u); - template <class T, class U> constexpr bool operator>(const propagate_const<T>& pt, const _Up& u); - template <class T, class U> constexpr bool operator<=(const propagate_const<T>& pt, const _Up& u); - template <class T, class U> constexpr bool operator>=(const propagate_const<T>& pt, const _Up& u); - template <class T, class U> constexpr bool operator==(const _Tp& t, const propagate_const<_Up>& pu); - template <class T, class U> constexpr bool operator!=(const _Tp& t, const propagate_const<_Up>& pu); - template <class T, class U> constexpr bool operator<(const _Tp& t, const propagate_const<_Up>& pu); - template <class T, class U> constexpr bool operator>(const _Tp& t, const propagate_const<_Up>& pu); - template <class T, class U> constexpr bool operator<=(const _Tp& t, const propagate_const<_Up>& pu); - template <class T, class U> constexpr bool operator>=(const _Tp& t, const propagate_const<_Up>& pu); - - // [propagate_const.algorithms], specialized algorithms - template <class T> constexpr void swap(propagate_const<T>& pt, propagate_const<T>& pu) noexcept(see below); - - template <class T> - class propagate_const - { - - public: - typedef remove_reference_t<decltype(*declval<T&>())> element_type; - - // [propagate_const.ctor], constructors - constexpr propagate_const() = default; - propagate_const(const propagate_const& p) = delete; - constexpr propagate_const(propagate_const&& p) = default; - template <class U> EXPLICIT constexpr propagate_const(propagate_const<_Up>&& pu); // see below - template <class U> EXPLICIT constexpr propagate_const(U&& u); // see below - - // [propagate_const.assignment], assignment - propagate_const& operator=(const propagate_const& p) = delete; - constexpr propagate_const& operator=(propagate_const&& p) = default; - template <class U> constexpr propagate_const& operator=(propagate_const<_Up>&& pu); - template <class U> constexpr propagate_const& operator=(U&& u); // see below - - // [propagate_const.const_observers], const observers - explicit constexpr operator bool() const; - constexpr const element_type* operator->() const; - constexpr operator const element_type*() const; // Not always defined - constexpr const element_type& operator*() const; - constexpr const element_type* get() const; - - // [propagate_const.non_const_observers], non-const observers - constexpr element_type* operator->(); - constexpr operator element_type*(); // Not always defined - constexpr element_type& operator*(); - constexpr element_type* get(); - - // [propagate_const.modifiers], modifiers - constexpr void swap(propagate_const& pt) noexcept(see below) - - private: - T t_; // exposition only - }; - - } // namespace fundamentals_v2 - } // namespace experimental - - // [propagate_const.hash], hash support - template <class T> struct hash<experimental::propagate_const<T>>; - - // [propagate_const.comparison_function_objects], comparison function objects - template <class T> struct equal_to<experimental::propagate_const<T>>; - template <class T> struct not_equal_to<experimental::propagate_const<T>>; - template <class T> struct less<experimental::propagate_const<T>>; - template <class T> struct greater<experimental::propagate_const<T>>; - template <class T> struct less_equal<experimental::propagate_const<T>>; - template <class T> struct greater_equal<experimental::propagate_const<T>>; - -} // namespace std - -*/ - -#if __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS) -# include <__cxx03/__config> -#else -# include <__config> -# include <__cstddef/nullptr_t.h> -# include <__cstddef/size_t.h> -# include <__functional/operations.h> -# include <__fwd/functional.h> -# include <__type_traits/conditional.h> -# include <__type_traits/decay.h> -# include <__type_traits/enable_if.h> -# include <__type_traits/is_array.h> -# include <__type_traits/is_constructible.h> -# include <__type_traits/is_convertible.h> -# include <__type_traits/is_function.h> -# include <__type_traits/is_pointer.h> -# include <__type_traits/is_reference.h> -# include <__type_traits/is_same.h> -# include <__type_traits/is_swappable.h> -# include <__type_traits/remove_cv.h> -# include <__type_traits/remove_pointer.h> -# include <__type_traits/remove_reference.h> -# include <__utility/declval.h> -# include <__utility/forward.h> -# include <__utility/move.h> -# include <__utility/swap.h> -# include <version> - -# if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -# endif - -_LIBCPP_PUSH_MACROS -# include <__undef_macros> - -# if _LIBCPP_STD_VER >= 14 - -_LIBCPP_BEGIN_NAMESPACE_LFTS_V2 - -template <class _Tp> -class propagate_const; - -template <class _Up> -inline _LIBCPP_HIDE_FROM_ABI constexpr const _Up& get_underlying(const propagate_const<_Up>& __pu) _NOEXCEPT; - -template <class _Up> -inline _LIBCPP_HIDE_FROM_ABI constexpr _Up& get_underlying(propagate_const<_Up>& __pu) _NOEXCEPT; - -template <class _Tp> -class propagate_const { -public: - typedef remove_reference_t<decltype(*std::declval<_Tp&>())> element_type; - - static_assert(!is_array<_Tp>::value, "Instantiation of propagate_const with an array type is ill-formed."); - static_assert(!is_reference<_Tp>::value, "Instantiation of propagate_const with a reference type is ill-formed."); - static_assert(!(is_pointer<_Tp>::value && is_function<__remove_pointer_t<_Tp> >::value), - "Instantiation of propagate_const with a function-pointer type is ill-formed."); - static_assert(!(is_pointer<_Tp>::value && is_same<__remove_cv_t<__remove_pointer_t<_Tp> >, void>::value), - "Instantiation of propagate_const with a pointer to (possibly cv-qualified) void is ill-formed."); - -private: - template <class _Up> - static _LIBCPP_HIDE_FROM_ABI constexpr element_type* __get_pointer(_Up* __u) { - return __u; - } - - template <class _Up> - static _LIBCPP_HIDE_FROM_ABI constexpr element_type* __get_pointer(_Up& __u) { - return __get_pointer(__u.get()); - } - - template <class _Up> - static _LIBCPP_HIDE_FROM_ABI constexpr const element_type* __get_pointer(const _Up* __u) { - return __u; - } - - template <class _Up> - static _LIBCPP_HIDE_FROM_ABI constexpr const element_type* __get_pointer(const _Up& __u) { - return __get_pointer(__u.get()); - } - - template <class _Up> - struct __is_propagate_const : false_type {}; - - template <class _Up> - struct __is_propagate_const<propagate_const<_Up>> : true_type {}; - - _Tp __t_; - -public: - template <class _Up> - friend constexpr const _Up& experimental::fundamentals_v2::get_underlying(const propagate_const<_Up>& __pu) _NOEXCEPT; - template <class _Up> - friend constexpr _Up& experimental::fundamentals_v2::get_underlying(propagate_const<_Up>& __pu) _NOEXCEPT; - - _LIBCPP_HIDE_FROM_ABI constexpr propagate_const() = default; - - propagate_const(const propagate_const&) = delete; - - _LIBCPP_HIDE_FROM_ABI constexpr propagate_const(propagate_const&&) = default; - - template <class _Up, - enable_if_t<!is_convertible<_Up, _Tp>::value && is_constructible<_Tp, _Up&&>::value, bool> = true> - explicit _LIBCPP_HIDE_FROM_ABI constexpr propagate_const(propagate_const<_Up>&& __pu) - : __t_(std::move(experimental::get_underlying(__pu))) {} - - template <class _Up, - enable_if_t<is_convertible<_Up&&, _Tp>::value && is_constructible<_Tp, _Up&&>::value, bool> = false> - _LIBCPP_HIDE_FROM_ABI constexpr propagate_const(propagate_const<_Up>&& __pu) - : __t_(std::move(experimental::get_underlying(__pu))) {} - - template <class _Up, - enable_if_t<!is_convertible<_Up&&, _Tp>::value && is_constructible<_Tp, _Up&&>::value && - !__is_propagate_const<decay_t<_Up>>::value, - bool> = true> - explicit _LIBCPP_HIDE_FROM_ABI constexpr propagate_const(_Up&& __u) : __t_(std::forward<_Up>(__u)) {} - - template <class _Up, - enable_if_t<is_convertible<_Up&&, _Tp>::value && is_constructible<_Tp, _Up&&>::value && - !__is_propagate_const<decay_t<_Up>>::value, - bool> = false> - _LIBCPP_HIDE_FROM_ABI constexpr propagate_const(_Up&& __u) : __t_(std::forward<_Up>(__u)) {} - - propagate_const& operator=(const propagate_const&) = delete; - - _LIBCPP_HIDE_FROM_ABI constexpr propagate_const& operator=(propagate_const&&) = default; - - template <class _Up> - _LIBCPP_HIDE_FROM_ABI constexpr propagate_const& operator=(propagate_const<_Up>&& __pu) { - __t_ = std::move(experimental::get_underlying(__pu)); - return *this; - } - - template <class _Up, class _Vp = enable_if_t<!__is_propagate_const<decay_t<_Up>>::value>> - _LIBCPP_HIDE_FROM_ABI constexpr propagate_const& operator=(_Up&& __u) { - __t_ = std::forward<_Up>(__u); - return *this; - } - - _LIBCPP_HIDE_FROM_ABI constexpr const element_type* get() const { return __get_pointer(__t_); } - - _LIBCPP_HIDE_FROM_ABI constexpr element_type* get() { return __get_pointer(__t_); } - - _LIBCPP_HIDE_FROM_ABI explicit constexpr operator bool() const { return get() != nullptr; } - - _LIBCPP_HIDE_FROM_ABI constexpr const element_type* operator->() const { return get(); } - - template <class _Dummy = _Tp, class _Up = enable_if_t<is_convertible< const _Dummy, const element_type*>::value>> - _LIBCPP_HIDE_FROM_ABI constexpr operator const element_type*() const { - return get(); - } - - _LIBCPP_HIDE_FROM_ABI constexpr const element_type& operator*() const { return *get(); } - - _LIBCPP_HIDE_FROM_ABI constexpr element_type* operator->() { return get(); } - - template <class _Dummy = _Tp, class _Up = enable_if_t< is_convertible<_Dummy, element_type*>::value>> - _LIBCPP_HIDE_FROM_ABI constexpr operator element_type*() { - return get(); - } - - _LIBCPP_HIDE_FROM_ABI constexpr element_type& operator*() { return *get(); } - - _LIBCPP_HIDE_FROM_ABI constexpr void swap(propagate_const& __pt) noexcept(__is_nothrow_swappable_v<_Tp>) { - using std::swap; - swap(__t_, __pt.__t_); - } -}; - -template <class _Tp> -_LIBCPP_HIDE_FROM_ABI constexpr bool operator==(const propagate_const<_Tp>& __pt, nullptr_t) { - return experimental::get_underlying(__pt) == nullptr; -} - -template <class _Tp> -_LIBCPP_HIDE_FROM_ABI constexpr bool operator==(nullptr_t, const propagate_const<_Tp>& __pt) { - return nullptr == experimental::get_underlying(__pt); -} - -template <class _Tp> -_LIBCPP_HIDE_FROM_ABI constexpr bool operator!=(const propagate_const<_Tp>& __pt, nullptr_t) { - return experimental::get_underlying(__pt) != nullptr; -} - -template <class _Tp> -_LIBCPP_HIDE_FROM_ABI constexpr bool operator!=(nullptr_t, const propagate_const<_Tp>& __pt) { - return nullptr != experimental::get_underlying(__pt); -} - -template <class _Tp, class _Up> -_LIBCPP_HIDE_FROM_ABI constexpr bool operator==(const propagate_const<_Tp>& __pt, const propagate_const<_Up>& __pu) { - return experimental::get_underlying(__pt) == experimental::get_underlying(__pu); -} - -template <class _Tp, class _Up> -_LIBCPP_HIDE_FROM_ABI constexpr bool operator!=(const propagate_const<_Tp>& __pt, const propagate_const<_Up>& __pu) { - return experimental::get_underlying(__pt) != experimental::get_underlying(__pu); -} - -template <class _Tp, class _Up> -_LIBCPP_HIDE_FROM_ABI constexpr bool operator<(const propagate_const<_Tp>& __pt, const propagate_const<_Up>& __pu) { - return experimental::get_underlying(__pt) < experimental::get_underlying(__pu); -} - -template <class _Tp, class _Up> -_LIBCPP_HIDE_FROM_ABI constexpr bool operator>(const propagate_const<_Tp>& __pt, const propagate_const<_Up>& __pu) { - return experimental::get_underlying(__pt) > experimental::get_underlying(__pu); -} - -template <class _Tp, class _Up> -_LIBCPP_HIDE_FROM_ABI constexpr bool operator<=(const propagate_const<_Tp>& __pt, const propagate_const<_Up>& __pu) { - return experimental::get_underlying(__pt) <= experimental::get_underlying(__pu); -} - -template <class _Tp, class _Up> -_LIBCPP_HIDE_FROM_ABI constexpr bool operator>=(const propagate_const<_Tp>& __pt, const propagate_const<_Up>& __pu) { - return experimental::get_underlying(__pt) >= experimental::get_underlying(__pu); -} - -template <class _Tp, class _Up> -_LIBCPP_HIDE_FROM_ABI constexpr bool operator==(const propagate_const<_Tp>& __pt, const _Up& __u) { - return experimental::get_underlying(__pt) == __u; -} - -template <class _Tp, class _Up> -_LIBCPP_HIDE_FROM_ABI constexpr bool operator!=(const propagate_const<_Tp>& __pt, const _Up& __u) { - return experimental::get_underlying(__pt) != __u; -} - -template <class _Tp, class _Up> -_LIBCPP_HIDE_FROM_ABI constexpr bool operator<(const propagate_const<_Tp>& __pt, const _Up& __u) { - return experimental::get_underlying(__pt) < __u; -} - -template <class _Tp, class _Up> -_LIBCPP_HIDE_FROM_ABI constexpr bool operator>(const propagate_const<_Tp>& __pt, const _Up& __u) { - return experimental::get_underlying(__pt) > __u; -} - -template <class _Tp, class _Up> -_LIBCPP_HIDE_FROM_ABI constexpr bool operator<=(const propagate_const<_Tp>& __pt, const _Up& __u) { - return experimental::get_underlying(__pt) <= __u; -} - -template <class _Tp, class _Up> -_LIBCPP_HIDE_FROM_ABI constexpr bool operator>=(const propagate_const<_Tp>& __pt, const _Up& __u) { - return experimental::get_underlying(__pt) >= __u; -} - -template <class _Tp, class _Up> -_LIBCPP_HIDE_FROM_ABI constexpr bool operator==(const _Tp& __t, const propagate_const<_Up>& __pu) { - return __t == experimental::get_underlying(__pu); -} - -template <class _Tp, class _Up> -_LIBCPP_HIDE_FROM_ABI constexpr bool operator!=(const _Tp& __t, const propagate_const<_Up>& __pu) { - return __t != experimental::get_underlying(__pu); -} - -template <class _Tp, class _Up> -_LIBCPP_HIDE_FROM_ABI constexpr bool operator<(const _Tp& __t, const propagate_const<_Up>& __pu) { - return __t < experimental::get_underlying(__pu); -} - -template <class _Tp, class _Up> -_LIBCPP_HIDE_FROM_ABI constexpr bool operator>(const _Tp& __t, const propagate_const<_Up>& __pu) { - return __t > experimental::get_underlying(__pu); -} - -template <class _Tp, class _Up> -_LIBCPP_HIDE_FROM_ABI constexpr bool operator<=(const _Tp& __t, const propagate_const<_Up>& __pu) { - return __t <= experimental::get_underlying(__pu); -} - -template <class _Tp, class _Up> -_LIBCPP_HIDE_FROM_ABI constexpr bool operator>=(const _Tp& __t, const propagate_const<_Up>& __pu) { - return __t >= experimental::get_underlying(__pu); -} - -template <class _Tp> -_LIBCPP_HIDE_FROM_ABI constexpr void -swap(propagate_const<_Tp>& __pc1, propagate_const<_Tp>& __pc2) noexcept(__is_nothrow_swappable_v<_Tp>) { - __pc1.swap(__pc2); -} - -template <class _Tp> -constexpr const _Tp& get_underlying(const propagate_const<_Tp>& __pt) _NOEXCEPT { - return __pt.__t_; -} - -template <class _Tp> -constexpr _Tp& get_underlying(propagate_const<_Tp>& __pt) _NOEXCEPT { - return __pt.__t_; -} - -_LIBCPP_END_NAMESPACE_LFTS_V2 - -_LIBCPP_BEGIN_NAMESPACE_STD - -template <class _Tp> -struct hash<experimental::propagate_const<_Tp>> { - typedef size_t result_type; - typedef experimental::propagate_const<_Tp> argument_type; - - _LIBCPP_HIDE_FROM_ABI size_t operator()(const experimental::propagate_const<_Tp>& __pc1) const { - return std::hash<_Tp>()(experimental::get_underlying(__pc1)); - } -}; - -template <class _Tp> -struct equal_to<experimental::propagate_const<_Tp>> { - typedef experimental::propagate_const<_Tp> first_argument_type; - typedef experimental::propagate_const<_Tp> second_argument_type; - - _LIBCPP_HIDE_FROM_ABI bool - operator()(const experimental::propagate_const<_Tp>& __pc1, const experimental::propagate_const<_Tp>& __pc2) const { - return std::equal_to<_Tp>()(experimental::get_underlying(__pc1), experimental::get_underlying(__pc2)); - } -}; - -template <class _Tp> -struct not_equal_to<experimental::propagate_const<_Tp>> { - typedef experimental::propagate_const<_Tp> first_argument_type; - typedef experimental::propagate_const<_Tp> second_argument_type; - - _LIBCPP_HIDE_FROM_ABI bool - operator()(const experimental::propagate_const<_Tp>& __pc1, const experimental::propagate_const<_Tp>& __pc2) const { - return std::not_equal_to<_Tp>()(experimental::get_underlying(__pc1), experimental::get_underlying(__pc2)); - } -}; - -template <class _Tp> -struct less<experimental::propagate_const<_Tp>> { - typedef experimental::propagate_const<_Tp> first_argument_type; - typedef experimental::propagate_const<_Tp> second_argument_type; - - _LIBCPP_HIDE_FROM_ABI bool - operator()(const experimental::propagate_const<_Tp>& __pc1, const experimental::propagate_const<_Tp>& __pc2) const { - return std::less<_Tp>()(experimental::get_underlying(__pc1), experimental::get_underlying(__pc2)); - } -}; - -template <class _Tp> -struct greater<experimental::propagate_const<_Tp>> { - typedef experimental::propagate_const<_Tp> first_argument_type; - typedef experimental::propagate_const<_Tp> second_argument_type; - - _LIBCPP_HIDE_FROM_ABI bool - operator()(const experimental::propagate_const<_Tp>& __pc1, const experimental::propagate_const<_Tp>& __pc2) const { - return std::greater<_Tp>()(experimental::get_underlying(__pc1), experimental::get_underlying(__pc2)); - } -}; - -template <class _Tp> -struct less_equal<experimental::propagate_const<_Tp>> { - typedef experimental::propagate_const<_Tp> first_argument_type; - typedef experimental::propagate_const<_Tp> second_argument_type; - - _LIBCPP_HIDE_FROM_ABI bool - operator()(const experimental::propagate_const<_Tp>& __pc1, const experimental::propagate_const<_Tp>& __pc2) const { - return std::less_equal<_Tp>()(experimental::get_underlying(__pc1), experimental::get_underlying(__pc2)); - } -}; - -template <class _Tp> -struct greater_equal<experimental::propagate_const<_Tp>> { - typedef experimental::propagate_const<_Tp> first_argument_type; - typedef experimental::propagate_const<_Tp> second_argument_type; - - _LIBCPP_HIDE_FROM_ABI bool - operator()(const experimental::propagate_const<_Tp>& __pc1, const experimental::propagate_const<_Tp>& __pc2) const { - return std::greater_equal<_Tp>()(experimental::get_underlying(__pc1), experimental::get_underlying(__pc2)); - } -}; - -_LIBCPP_END_NAMESPACE_STD - -# endif // _LIBCPP_STD_VER >= 14 - -_LIBCPP_POP_MACROS - -# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20 -# include <cstddef> -# include <type_traits> -# endif -#endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS) - -#endif // _LIBCPP_EXPERIMENTAL_PROPAGATE_CONST diff --git a/third_party/libcxx/include/c++/v1/experimental/simd b/third_party/libcxx/include/c++/v1/experimental/simd deleted file mode 100644 index 2e1c781..0000000 --- a/third_party/libcxx/include/c++/v1/experimental/simd +++ /dev/null @@ -1,96 +0,0 @@ -// -*- C++ -*- -//===----------------------------------------------------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -#ifndef _LIBCPP_EXPERIMENTAL_SIMD -#define _LIBCPP_EXPERIMENTAL_SIMD - -/* - experimental/simd synopsis - -namespace std::experimental { -inline namespace parallelism_v2 { - namespace simd_abi { - using scalar = see below; - template<int N> using fixed_size = see below; - template<class T> inline constexpr int max_fixed_size = implementation-defined; - template<class T> using compatible = implementation-defined; - template<class T> using native = implementation-defined; - - template<class T, size_t N, class... Abis> struct deduce { using type = see below; }; - template<class T, size_t N, class... Abis> using deduce_t = - typename deduce<T, N, Abis...>::type; - } // namespace simd_abi - - // class template simd [simd.class] - template <class T, class Abi = simd_abi::compatible<T>> class simd; - template <class T> using native_simd = simd<T, simd_abi::native<T>>; - template <class T, int N> using fixed_size_simd = simd<T, simd_abi::fixed_size<N>>; - - // class template simd_mask [simd.mask.class] - template <class T, class Abi = simd_abi::compatible<T>> class simd_mask; - template <class T> using native_simd_mask = simd_mask<T, simd_abi::native<T>>; - template <class T, int N> using fixed_size_simd_mask = simd_mask<T, simd_abi::fixed_size<N>>; - - // memory alignment - struct element_aligned_tag {}; - struct vector_aligned_tag {}; - template <size_t> struct overaligned_tag {}; - inline constexpr element_aligned_tag element_aligned{}; - inline constexpr vector_aligned_tag vector_aligned{}; - template <size_t N> inline constexpr overaligned_tag<N> overaligned{}; - - // traits [simd.traits] - template<class T> struct is_abi_tag; - template<class T> inline constexpr bool is_abi_tag_v = is_abi_tag<T>::value; - - template <class T> struct is_simd; - template <class T> inline constexpr bool is_simd_v = is_simd<T>::value; - - template <class T> struct is_simd_mask; - template <class T> inline constexpr bool is_simd_mask_v = is_simd_mask<T>::value; - - template<class T> struct is_simd_flag_type; - template<class T> inline constexpr bool is_simd_flag_type_v = is_simd_flag_type<T>::value; - - template<class T, class Abi = simd_abi::compatible<T>> struct simd_size; - template<class T, class Abi = simd_abi::compatible<T>> - inline constexpr size_t simd_size_v = simd_size<T,Abi>::value; - - template<class T, class U = typename T::value_type> struct memory_alignment; - template<class T, class U = typename T::value_type> - inline constexpr size_t memory_alignment_v = memory_alignment<T,U>::value; - -} // namespace parallelism_v2 -} // namespace std::experimental - -*/ - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -#if __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS) -# include <__cxx03/__config> -#else -# include <__config> -# include <experimental/__simd/aligned_tag.h> -# include <experimental/__simd/declaration.h> -# include <experimental/__simd/reference.h> -# include <experimental/__simd/scalar.h> -# include <experimental/__simd/simd.h> -# include <experimental/__simd/simd_mask.h> -# include <experimental/__simd/traits.h> -# include <experimental/__simd/vec_ext.h> - -# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20 -# include <cstddef> -# endif -#endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS) - -#endif /* _LIBCPP_EXPERIMENTAL_SIMD */ diff --git a/third_party/libcxx/include/c++/v1/experimental/type_traits b/third_party/libcxx/include/c++/v1/experimental/type_traits deleted file mode 100644 index fd03546..0000000 --- a/third_party/libcxx/include/c++/v1/experimental/type_traits +++ /dev/null @@ -1,161 +0,0 @@ -// -*- C++ -*- -//===----------------------------------------------------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -#ifndef _LIBCPP_EXPERIMENTAL_TYPE_TRAITS -#define _LIBCPP_EXPERIMENTAL_TYPE_TRAITS - -/** - experimental/type_traits synopsis - -// C++1y -#include <type_traits> - -namespace std { -namespace experimental { -inline namespace fundamentals_v1 { - - // 3.3.2, Other type transformations - template <class> class invocation_type; // not defined - template <class F, class... ArgTypes> class invocation_type<F(ArgTypes...)>; - template <class> class raw_invocation_type; // not defined - template <class F, class... ArgTypes> class raw_invocation_type<F(ArgTypes...)>; - - template <class T> - using invocation_type_t = typename invocation_type<T>::type; - template <class T> - using raw_invocation_type_t = typename raw_invocation_type<T>::type; - - // 3.3.4, Detection idiom - template <class...> using void_t = void; - - struct nonesuch { - nonesuch() = delete; - ~nonesuch() = delete; - nonesuch(nonesuch const&) = delete; - void operator=(nonesuch const&) = delete; - }; - - template <template<class...> class Op, class... Args> - using is_detected = see below; - template <template<class...> class Op, class... Args> - constexpr bool is_detected_v = is_detected<Op, Args...>::value; - template <template<class...> class Op, class... Args> - using detected_t = see below; - template <class Default, template<class...> class Op, class... Args> - using detected_or = see below; - template <class Default, template<class...> class Op, class... Args> - using detected_or_t = typename detected_or<Default, Op, Args...>::type; - template <class Expected, template<class...> class Op, class... Args> - using is_detected_exact = is_same<Expected, detected_t<Op, Args...>>; - template <class Expected, template<class...> class Op, class... Args> - constexpr bool is_detected_exact_v - = is_detected_exact<Expected, Op, Args...>::value; - template <class To, template<class...> class Op, class... Args> - using is_detected_convertible = is_convertible<detected_t<Op, Args...>, To>; - template <class To, template<class...> class Op, class... Args> - constexpr bool is_detected_convertible_v - = is_detected_convertible<To, Op, Args...>::value; - -} // namespace fundamentals_v1 -} // namespace experimental -} // namespace std - - */ - -#if __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS) -# include <__cxx03/__config> -#else -# include <__config> - -# if _LIBCPP_STD_VER >= 14 - -# include <initializer_list> -# include <type_traits> - -# if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -# endif - -_LIBCPP_BEGIN_NAMESPACE_LFTS - -// 3.3.2, Other type transformations -/* -template <class> -class raw_invocation_type; - -template <class _Fn, class ..._Args> -class raw_invocation_type<_Fn(_Args...)>; - -template <class> -class invokation_type; - -template <class _Fn, class ..._Args> -class invokation_type<_Fn(_Args...)>; - -template <class _Tp> -using invokation_type_t = typename invokation_type<_Tp>::type; - -template <class _Tp> -using raw_invocation_type_t = typename raw_invocation_type<_Tp>::type; -*/ - -// 3.3.4, Detection idiom -template <class...> -using void_t = void; - -struct nonesuch : private __nat { // make nonesuch "not an aggregate" - ~nonesuch() = delete; - nonesuch(nonesuch const&) = delete; - void operator=(nonesuch const&) = delete; -}; - -template <class _Default, class _AlwaysVoid, template <class...> class _Op, class... _Args> -struct _DETECTOR { - using value_t = false_type; - using type = _Default; -}; - -template <class _Default, template <class...> class _Op, class... _Args> -struct _DETECTOR<_Default, void_t<_Op<_Args...>>, _Op, _Args...> { - using value_t = true_type; - using type = _Op<_Args...>; -}; - -template <template <class...> class _Op, class... _Args> -using is_detected = typename _DETECTOR<nonesuch, void, _Op, _Args...>::value_t; -template <template <class...> class _Op, class... _Args> -using detected_t = typename _DETECTOR<nonesuch, void, _Op, _Args...>::type; -template <template <class...> class _Op, class... _Args> -constexpr bool is_detected_v = is_detected<_Op, _Args...>::value; - -template <class _Default, template <class...> class _Op, class... _Args> -using detected_or = _DETECTOR<_Default, void, _Op, _Args...>; -template <class _Default, template <class...> class _Op, class... _Args> -using detected_or_t = typename detected_or<_Default, _Op, _Args...>::type; - -template <class _Expected, template <class...> class _Op, class... _Args> -using is_detected_exact = is_same<_Expected, detected_t<_Op, _Args...>>; -template <class _Expected, template <class...> class _Op, class... _Args> -constexpr bool is_detected_exact_v = is_detected_exact<_Expected, _Op, _Args...>::value; - -template <class _To, template <class...> class _Op, class... _Args> -using is_detected_convertible = is_convertible<detected_t<_Op, _Args...>, _To>; -template <class _To, template <class...> class _Op, class... _Args> -constexpr bool is_detected_convertible_v = is_detected_convertible<_To, _Op, _Args...>::value; - -_LIBCPP_END_NAMESPACE_LFTS - -# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20 -# include <cstddef> -# endif - -# endif /* _LIBCPP_STD_VER >= 14 */ -#endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS) - -#endif /* _LIBCPP_EXPERIMENTAL_TYPE_TRAITS */ diff --git a/third_party/libcxx/include/c++/v1/experimental/utility b/third_party/libcxx/include/c++/v1/experimental/utility deleted file mode 100644 index fb0537f..0000000 --- a/third_party/libcxx/include/c++/v1/experimental/utility +++ /dev/null @@ -1,54 +0,0 @@ -// -*- C++ -*- -//===----------------------------------------------------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -#ifndef _LIBCPP_EXPERIMENTAL_UTILITY -#define _LIBCPP_EXPERIMENTAL_UTILITY - -/* - experimental/utility synopsis - -// C++1y - -#include <utility> - -namespace std { -namespace experimental { -inline namespace fundamentals_v1 { - - 3.1.2, erased-type placeholder - struct erased_type { }; - -} // namespace fundamentals_v1 -} // namespace experimental -} // namespace std - - */ - -#if __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS) -# include <__cxx03/experimental/utility> -#else -# include <__config> -# include <utility> - -# if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -# endif - -_LIBCPP_BEGIN_NAMESPACE_LFTS - -struct erased_type {}; - -_LIBCPP_END_NAMESPACE_LFTS - -# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20 -# include <cstddef> -# endif -#endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS) - -#endif /* _LIBCPP_EXPERIMENTAL_UTILITY */ |
