Merge libc++ trunk r291476, update Makefile, ObsoleteFiles.inc and
OptionalObsoleteFiles.inc.
This commit is contained in:
commit
80779b3774
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/projects/clang400-import/; revision=311834
@ -38,6 +38,9 @@
|
|||||||
# xargs -n1 | sort | uniq -d;
|
# xargs -n1 | sort | uniq -d;
|
||||||
# done
|
# done
|
||||||
|
|
||||||
|
# 2017mmdd: new libc++ import which bumps version from 3.9.1 to 4.0.0.
|
||||||
|
OLD_FILES+=usr/include/c++/v1/__undef___deallocate
|
||||||
|
OLD_FILES+=usr/include/c++/v1/tr1/__undef___deallocate
|
||||||
# 2017mmdd: new clang import which bumps version from 3.9.1 to 4.0.0.
|
# 2017mmdd: new clang import which bumps version from 3.9.1 to 4.0.0.
|
||||||
OLD_FILES+=usr/lib/clang/3.9.1/include/sanitizer/allocator_interface.h
|
OLD_FILES+=usr/lib/clang/3.9.1/include/sanitizer/allocator_interface.h
|
||||||
OLD_FILES+=usr/lib/clang/3.9.1/include/sanitizer/asan_interface.h
|
OLD_FILES+=usr/lib/clang/3.9.1/include/sanitizer/asan_interface.h
|
||||||
|
@ -80,6 +80,10 @@ N: Andrew Morrow
|
|||||||
E: andrew.c.morrow@gmail.com
|
E: andrew.c.morrow@gmail.com
|
||||||
D: Minor patches and Linux fixes.
|
D: Minor patches and Linux fixes.
|
||||||
|
|
||||||
|
N: Michael Park
|
||||||
|
E: mpark@apache.org
|
||||||
|
D: Implementation of <variant>.
|
||||||
|
|
||||||
N: Arvid Picciani
|
N: Arvid Picciani
|
||||||
E: aep at exys dot org
|
E: aep at exys dot org
|
||||||
D: Minor patches and musl port.
|
D: Minor patches and musl port.
|
||||||
|
@ -40,11 +40,8 @@ class __bit_reference
|
|||||||
__storage_pointer __seg_;
|
__storage_pointer __seg_;
|
||||||
__storage_type __mask_;
|
__storage_type __mask_;
|
||||||
|
|
||||||
#if defined(__clang__) || defined(__IBMCPP__) || defined(_LIBCPP_MSVC)
|
|
||||||
friend typename _Cp::__self;
|
friend typename _Cp::__self;
|
||||||
#else
|
|
||||||
friend class _Cp::__self;
|
|
||||||
#endif
|
|
||||||
friend class __bit_const_reference<_Cp>;
|
friend class __bit_const_reference<_Cp>;
|
||||||
friend class __bit_iterator<_Cp, false>;
|
friend class __bit_iterator<_Cp, false>;
|
||||||
public:
|
public:
|
||||||
@ -130,11 +127,7 @@ class __bit_const_reference
|
|||||||
__storage_pointer __seg_;
|
__storage_pointer __seg_;
|
||||||
__storage_type __mask_;
|
__storage_type __mask_;
|
||||||
|
|
||||||
#if defined(__clang__) || defined(__IBMCPP__) || defined(_LIBCPP_MSVC)
|
|
||||||
friend typename _Cp::__self;
|
friend typename _Cp::__self;
|
||||||
#else
|
|
||||||
friend class _Cp::__self;
|
|
||||||
#endif
|
|
||||||
friend class __bit_iterator<_Cp, true>;
|
friend class __bit_iterator<_Cp, true>;
|
||||||
public:
|
public:
|
||||||
_LIBCPP_INLINE_VISIBILITY
|
_LIBCPP_INLINE_VISIBILITY
|
||||||
@ -1221,11 +1214,8 @@ private:
|
|||||||
__bit_iterator(__storage_pointer __s, unsigned __ctz) _NOEXCEPT
|
__bit_iterator(__storage_pointer __s, unsigned __ctz) _NOEXCEPT
|
||||||
: __seg_(__s), __ctz_(__ctz) {}
|
: __seg_(__s), __ctz_(__ctz) {}
|
||||||
|
|
||||||
#if defined(__clang__) || defined(__IBMCPP__) || defined(_LIBCPP_MSVC)
|
|
||||||
friend typename _Cp::__self;
|
friend typename _Cp::__self;
|
||||||
#else
|
|
||||||
friend class _Cp::__self;
|
|
||||||
#endif
|
|
||||||
friend class __bit_reference<_Cp>;
|
friend class __bit_reference<_Cp>;
|
||||||
friend class __bit_const_reference<_Cp>;
|
friend class __bit_const_reference<_Cp>;
|
||||||
friend class __bit_iterator<_Cp, true>;
|
friend class __bit_iterator<_Cp, true>;
|
||||||
|
@ -101,6 +101,25 @@
|
|||||||
#define __is_identifier(__x) 1
|
#define __is_identifier(__x) 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(__clang__)
|
||||||
|
#define _LIBCPP_COMPILER_CLANG
|
||||||
|
#elif defined(__GNUC__)
|
||||||
|
#define _LIBCPP_COMPILER_GCC
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
|
#define _LIBCPP_COMPILER_MSVC
|
||||||
|
#elif defined(__IBMCPP__)
|
||||||
|
#define _LIBCPP_COMPILER_IBM
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// FIXME: ABI detection should be done via compiler builtin macros. This
|
||||||
|
// is just a placeholder until Clang implements such macros. For now assume
|
||||||
|
// that Windows compilers pretending to be MSVC++ target the microsoft ABI.
|
||||||
|
#if defined(_WIN32) && defined(_MSC_VER)
|
||||||
|
# define _LIBCPP_ABI_MICROSOFT
|
||||||
|
#else
|
||||||
|
# define _LIBCPP_ABI_ITANIUM
|
||||||
|
#endif
|
||||||
|
|
||||||
// Need to detect which libc we're using if we're on Linux.
|
// Need to detect which libc we're using if we're on Linux.
|
||||||
#if defined(__linux__)
|
#if defined(__linux__)
|
||||||
#include <features.h>
|
#include <features.h>
|
||||||
@ -164,16 +183,7 @@
|
|||||||
# define _LIBCPP_LITTLE_ENDIAN 1
|
# define _LIBCPP_LITTLE_ENDIAN 1
|
||||||
# define _LIBCPP_BIG_ENDIAN 0
|
# define _LIBCPP_BIG_ENDIAN 0
|
||||||
# define _LIBCPP_SHORT_WCHAR 1
|
# define _LIBCPP_SHORT_WCHAR 1
|
||||||
// Compiler intrinsics (MSVC)
|
|
||||||
# if defined(_MSC_VER) && _MSC_VER >= 1400
|
|
||||||
# define _LIBCPP_HAS_IS_BASE_OF
|
|
||||||
# endif
|
|
||||||
# if defined(_MSC_VER) && !defined(__clang__)
|
|
||||||
# define _LIBCPP_MSVC // Using Microsoft Visual C++ compiler
|
|
||||||
# define _LIBCPP_TOSTRING2(x) #x
|
|
||||||
# define _LIBCPP_TOSTRING(x) _LIBCPP_TOSTRING2(x)
|
|
||||||
# define _LIBCPP_WARNING(x) __pragma(message(__FILE__ "(" _LIBCPP_TOSTRING(__LINE__) ") : warning note: " x))
|
|
||||||
# endif
|
|
||||||
// If mingw not explicitly detected, assume using MS C runtime only.
|
// If mingw not explicitly detected, assume using MS C runtime only.
|
||||||
# ifndef __MINGW32__
|
# ifndef __MINGW32__
|
||||||
# define _LIBCPP_MSVCRT // Using Microsoft's C Runtime library
|
# define _LIBCPP_MSVCRT // Using Microsoft's C Runtime library
|
||||||
@ -230,7 +240,7 @@
|
|||||||
#define _LIBCPP_NO_CFI
|
#define _LIBCPP_NO_CFI
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__clang__)
|
#if defined(_LIBCPP_COMPILER_CLANG)
|
||||||
|
|
||||||
// _LIBCPP_ALTERNATE_STRING_LAYOUT is an old name for
|
// _LIBCPP_ALTERNATE_STRING_LAYOUT is an old name for
|
||||||
// _LIBCPP_ABI_ALTERNATE_STRING_LAYOUT left here for backward compatibility.
|
// _LIBCPP_ABI_ALTERNATE_STRING_LAYOUT left here for backward compatibility.
|
||||||
@ -275,10 +285,6 @@ typedef __char32_t char32_t;
|
|||||||
# define _LIBCPP_NORETURN __attribute__ ((noreturn))
|
# define _LIBCPP_NORETURN __attribute__ ((noreturn))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !(__has_feature(cxx_deleted_functions))
|
|
||||||
#define _LIBCPP_HAS_NO_DELETED_FUNCTIONS
|
|
||||||
#endif // !(__has_feature(cxx_deleted_functions))
|
|
||||||
|
|
||||||
#if !(__has_feature(cxx_lambdas))
|
#if !(__has_feature(cxx_lambdas))
|
||||||
#define _LIBCPP_HAS_NO_LAMBDAS
|
#define _LIBCPP_HAS_NO_LAMBDAS
|
||||||
#endif
|
#endif
|
||||||
@ -390,7 +396,7 @@ namespace std {
|
|||||||
#define _LIBCPP_DISABLE_UBSAN_UNSIGNED_INTEGER_CHECK __attribute__((__no_sanitize__("unsigned-integer-overflow")))
|
#define _LIBCPP_DISABLE_UBSAN_UNSIGNED_INTEGER_CHECK __attribute__((__no_sanitize__("unsigned-integer-overflow")))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#elif defined(__GNUC__)
|
#elif defined(_LIBCPP_COMPILER_GCC)
|
||||||
|
|
||||||
#define _ALIGNAS(x) __attribute__((__aligned__(x)))
|
#define _ALIGNAS(x) __attribute__((__aligned__(x)))
|
||||||
#define _ALIGNAS_TYPE(x) __attribute__((__aligned__(__alignof(x))))
|
#define _ALIGNAS_TYPE(x) __attribute__((__aligned__(__alignof(x))))
|
||||||
@ -431,7 +437,6 @@ namespace std {
|
|||||||
|
|
||||||
#ifndef __GXX_EXPERIMENTAL_CXX0X__
|
#ifndef __GXX_EXPERIMENTAL_CXX0X__
|
||||||
#define _LIBCPP_HAS_NO_DECLTYPE
|
#define _LIBCPP_HAS_NO_DECLTYPE
|
||||||
#define _LIBCPP_HAS_NO_DELETED_FUNCTIONS
|
|
||||||
#define _LIBCPP_HAS_NO_NULLPTR
|
#define _LIBCPP_HAS_NO_NULLPTR
|
||||||
#define _LIBCPP_HAS_NO_UNICODE_CHARS
|
#define _LIBCPP_HAS_NO_UNICODE_CHARS
|
||||||
#define _LIBCPP_HAS_NO_VARIADICS
|
#define _LIBCPP_HAS_NO_VARIADICS
|
||||||
@ -448,7 +453,6 @@ namespace std {
|
|||||||
|
|
||||||
#if _GNUC_VER < 404
|
#if _GNUC_VER < 404
|
||||||
#define _LIBCPP_HAS_NO_DECLTYPE
|
#define _LIBCPP_HAS_NO_DECLTYPE
|
||||||
#define _LIBCPP_HAS_NO_DELETED_FUNCTIONS
|
|
||||||
#define _LIBCPP_HAS_NO_UNICODE_CHARS
|
#define _LIBCPP_HAS_NO_UNICODE_CHARS
|
||||||
#define _LIBCPP_HAS_NO_VARIADICS
|
#define _LIBCPP_HAS_NO_VARIADICS
|
||||||
#define _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
|
#define _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
|
||||||
@ -475,15 +479,23 @@ using namespace _LIBCPP_NAMESPACE __attribute__((__strong__));
|
|||||||
#define _LIBCPP_HAS_NO_ASAN
|
#define _LIBCPP_HAS_NO_ASAN
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#elif defined(_LIBCPP_MSVC)
|
#elif defined(_LIBCPP_COMPILER_MSVC)
|
||||||
|
|
||||||
|
#define _LIBCPP_TOSTRING2(x) #x
|
||||||
|
#define _LIBCPP_TOSTRING(x) _LIBCPP_TOSTRING2(x)
|
||||||
|
#define _LIBCPP_WARNING(x) __pragma(message(__FILE__ "(" _LIBCPP_TOSTRING(__LINE__) ") : warning note: " x))
|
||||||
|
|
||||||
|
#if _MSC_VER < 1900
|
||||||
|
#error "MSVC versions prior to Visual Studio 2015 are not supported"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define _LIBCPP_HAS_IS_BASE_OF
|
||||||
#define _LIBCPP_HAS_NO_CONSTEXPR
|
#define _LIBCPP_HAS_NO_CONSTEXPR
|
||||||
#define _LIBCPP_HAS_NO_CXX14_CONSTEXPR
|
#define _LIBCPP_HAS_NO_CXX14_CONSTEXPR
|
||||||
#define _LIBCPP_HAS_NO_VARIABLE_TEMPLATES
|
#define _LIBCPP_HAS_NO_VARIABLE_TEMPLATES
|
||||||
#if _MSC_VER <= 1800
|
#if _MSC_VER <= 1800
|
||||||
#define _LIBCPP_HAS_NO_UNICODE_CHARS
|
#define _LIBCPP_HAS_NO_UNICODE_CHARS
|
||||||
#endif
|
#endif
|
||||||
#define _LIBCPP_HAS_NO_DELETED_FUNCTIONS
|
|
||||||
#define _LIBCPP_HAS_NO_NOEXCEPT
|
#define _LIBCPP_HAS_NO_NOEXCEPT
|
||||||
#define __alignof__ __alignof
|
#define __alignof__ __alignof
|
||||||
#define _LIBCPP_NORETURN __declspec(noreturn)
|
#define _LIBCPP_NORETURN __declspec(noreturn)
|
||||||
@ -500,7 +512,7 @@ namespace std {
|
|||||||
|
|
||||||
#define _LIBCPP_HAS_NO_ASAN
|
#define _LIBCPP_HAS_NO_ASAN
|
||||||
|
|
||||||
#elif defined(__IBMCPP__)
|
#elif defined(_LIBCPP_COMPILER_IBM)
|
||||||
|
|
||||||
#define _ALIGNAS(x) __attribute__((__aligned__(x)))
|
#define _ALIGNAS(x) __attribute__((__aligned__(x)))
|
||||||
#define _ALIGNAS_TYPE(x) __attribute__((__aligned__(__alignof(x))))
|
#define _ALIGNAS_TYPE(x) __attribute__((__aligned__(__alignof(x))))
|
||||||
@ -530,7 +542,7 @@ namespace std {
|
|||||||
|
|
||||||
#define _LIBCPP_HAS_NO_ASAN
|
#define _LIBCPP_HAS_NO_ASAN
|
||||||
|
|
||||||
#endif // __clang__ || __GNUC__ || _MSC_VER || __IBMCPP__
|
#endif // _LIBCPP_COMPILER_[CLANG|GCC|MSVC|IBM]
|
||||||
|
|
||||||
#if defined(__ELF__)
|
#if defined(__ELF__)
|
||||||
#define _LIBCPP_OBJECT_FORMAT_ELF 1
|
#define _LIBCPP_OBJECT_FORMAT_ELF 1
|
||||||
@ -566,7 +578,7 @@ namespace std {
|
|||||||
#define _LIBCPP_FUNC_VIS_ONLY
|
#define _LIBCPP_FUNC_VIS_ONLY
|
||||||
#define _LIBCPP_ENUM_VIS
|
#define _LIBCPP_ENUM_VIS
|
||||||
|
|
||||||
#if defined(_LIBCPP_MSVC)
|
#if defined(_LIBCPP_COMPILER_MSVC)
|
||||||
# define _LIBCPP_INLINE_VISIBILITY __forceinline
|
# define _LIBCPP_INLINE_VISIBILITY __forceinline
|
||||||
# define _LIBCPP_ALWAYS_INLINE __forceinline
|
# define _LIBCPP_ALWAYS_INLINE __forceinline
|
||||||
# define _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY __forceinline
|
# define _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY __forceinline
|
||||||
@ -739,7 +751,7 @@ template <unsigned> struct __static_assert_check {};
|
|||||||
#define _LIBCPP_DEFAULT = default;
|
#define _LIBCPP_DEFAULT = default;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _LIBCPP_HAS_NO_DELETED_FUNCTIONS
|
#ifdef _LIBCPP_CXX03_LANG
|
||||||
#define _LIBCPP_EQUAL_DELETE
|
#define _LIBCPP_EQUAL_DELETE
|
||||||
#else
|
#else
|
||||||
#define _LIBCPP_EQUAL_DELETE = delete
|
#define _LIBCPP_EQUAL_DELETE = delete
|
||||||
@ -892,8 +904,7 @@ _LIBCPP_FUNC_VIS extern "C" void __sanitizer_annotate_contiguous_container(
|
|||||||
|
|
||||||
// Thread API
|
// Thread API
|
||||||
#if !defined(_LIBCPP_HAS_NO_THREADS) && \
|
#if !defined(_LIBCPP_HAS_NO_THREADS) && \
|
||||||
!defined(_LIBCPP_HAS_THREAD_API_PTHREAD) && \
|
!defined(_LIBCPP_HAS_THREAD_API_PTHREAD)
|
||||||
!defined(_LIBCPP_HAS_THREAD_API_EXTERNAL)
|
|
||||||
# if defined(__FreeBSD__) || \
|
# if defined(__FreeBSD__) || \
|
||||||
defined(__Fuchsia__) || \
|
defined(__Fuchsia__) || \
|
||||||
defined(__NetBSD__) || \
|
defined(__NetBSD__) || \
|
||||||
@ -901,7 +912,9 @@ _LIBCPP_FUNC_VIS extern "C" void __sanitizer_annotate_contiguous_container(
|
|||||||
defined(__APPLE__) || \
|
defined(__APPLE__) || \
|
||||||
defined(__CloudABI__) || \
|
defined(__CloudABI__) || \
|
||||||
defined(__sun__)
|
defined(__sun__)
|
||||||
# define _LIBCPP_HAS_THREAD_API_PTHREAD
|
# define _LIBCPP_HAS_THREAD_API_PTHREAD
|
||||||
|
# elif defined(_LIBCPP_WIN32API)
|
||||||
|
# define _LIBCPP_HAS_THREAD_API_WIN32
|
||||||
# else
|
# else
|
||||||
# error "No thread API"
|
# error "No thread API"
|
||||||
# endif // _LIBCPP_HAS_THREAD_API
|
# endif // _LIBCPP_HAS_THREAD_API
|
||||||
|
@ -122,7 +122,7 @@ struct _LIBCPP_TYPE_VIS __i_node
|
|||||||
__i_node* __next_;
|
__i_node* __next_;
|
||||||
__c_node* __c_;
|
__c_node* __c_;
|
||||||
|
|
||||||
#ifndef _LIBCPP_HAS_NO_DELETED_FUNCTIONS
|
#ifndef _LIBCPP_CXX03_LANG
|
||||||
__i_node(const __i_node&) = delete;
|
__i_node(const __i_node&) = delete;
|
||||||
__i_node& operator=(const __i_node&) = delete;
|
__i_node& operator=(const __i_node&) = delete;
|
||||||
#else
|
#else
|
||||||
@ -145,7 +145,7 @@ struct _LIBCPP_TYPE_VIS __c_node
|
|||||||
__i_node** end_;
|
__i_node** end_;
|
||||||
__i_node** cap_;
|
__i_node** cap_;
|
||||||
|
|
||||||
#ifndef _LIBCPP_HAS_NO_DELETED_FUNCTIONS
|
#ifndef _LIBCPP_CXX03_LANG
|
||||||
__c_node(const __c_node&) = delete;
|
__c_node(const __c_node&) = delete;
|
||||||
__c_node& operator=(const __c_node&) = delete;
|
__c_node& operator=(const __c_node&) = delete;
|
||||||
#else
|
#else
|
||||||
@ -232,7 +232,7 @@ class _LIBCPP_TYPE_VIS __libcpp_db
|
|||||||
|
|
||||||
__libcpp_db();
|
__libcpp_db();
|
||||||
public:
|
public:
|
||||||
#ifndef _LIBCPP_HAS_NO_DELETED_FUNCTIONS
|
#ifndef _LIBCPP_CXX03_LANG
|
||||||
__libcpp_db(const __libcpp_db&) = delete;
|
__libcpp_db(const __libcpp_db&) = delete;
|
||||||
__libcpp_db& operator=(const __libcpp_db&) = delete;
|
__libcpp_db& operator=(const __libcpp_db&) = delete;
|
||||||
#else
|
#else
|
||||||
|
@ -552,23 +552,10 @@ cref(reference_wrapper<_Tp> __t) _NOEXCEPT
|
|||||||
return cref(__t.get());
|
return cref(__t.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef _LIBCPP_HAS_NO_VARIADICS
|
#ifndef _LIBCPP_CXX03_LANG
|
||||||
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
|
||||||
#ifndef _LIBCPP_HAS_NO_DELETED_FUNCTIONS
|
|
||||||
|
|
||||||
template <class _Tp> void ref(const _Tp&&) = delete;
|
template <class _Tp> void ref(const _Tp&&) = delete;
|
||||||
template <class _Tp> void cref(const _Tp&&) = delete;
|
template <class _Tp> void cref(const _Tp&&) = delete;
|
||||||
|
#endif
|
||||||
#else // _LIBCPP_HAS_NO_DELETED_FUNCTIONS
|
|
||||||
|
|
||||||
template <class _Tp> void ref(const _Tp&&);// = delete;
|
|
||||||
template <class _Tp> void cref(const _Tp&&);// = delete;
|
|
||||||
|
|
||||||
#endif // _LIBCPP_HAS_NO_DELETED_FUNCTIONS
|
|
||||||
|
|
||||||
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
|
||||||
|
|
||||||
#endif // _LIBCPP_HAS_NO_VARIADICS
|
|
||||||
|
|
||||||
#if _LIBCPP_STD_VER > 11
|
#if _LIBCPP_STD_VER > 11
|
||||||
template <class _Tp1, class _Tp2 = void>
|
template <class _Tp1, class _Tp2 = void>
|
||||||
|
@ -20,7 +20,6 @@
|
|||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
#include <__undef_min_max>
|
#include <__undef_min_max>
|
||||||
#include <__undef___deallocate>
|
|
||||||
|
|
||||||
#include <__debug>
|
#include <__debug>
|
||||||
|
|
||||||
@ -1321,7 +1320,7 @@ private:
|
|||||||
void __move_assign_alloc(__hash_table&, false_type) _NOEXCEPT {}
|
void __move_assign_alloc(__hash_table&, false_type) _NOEXCEPT {}
|
||||||
#endif // _LIBCPP_CXX03_LANG
|
#endif // _LIBCPP_CXX03_LANG
|
||||||
|
|
||||||
void __deallocate(__next_pointer __np) _NOEXCEPT;
|
void __deallocate_node(__next_pointer __np) _NOEXCEPT;
|
||||||
__next_pointer __detach() _NOEXCEPT;
|
__next_pointer __detach() _NOEXCEPT;
|
||||||
|
|
||||||
template <class, class, class, class, class> friend class _LIBCPP_TEMPLATE_VIS unordered_map;
|
template <class, class, class, class, class> friend class _LIBCPP_TEMPLATE_VIS unordered_map;
|
||||||
@ -1454,7 +1453,7 @@ __hash_table<_Tp, _Hash, _Equal, _Alloc>::~__hash_table()
|
|||||||
"Predicate must be copy-constructible.");
|
"Predicate must be copy-constructible.");
|
||||||
static_assert((is_copy_constructible<hasher>::value),
|
static_assert((is_copy_constructible<hasher>::value),
|
||||||
"Hasher must be copy-constructible.");
|
"Hasher must be copy-constructible.");
|
||||||
__deallocate(__p1_.first().__next_);
|
__deallocate_node(__p1_.first().__next_);
|
||||||
#if _LIBCPP_DEBUG_LEVEL >= 2
|
#if _LIBCPP_DEBUG_LEVEL >= 2
|
||||||
__get_db()->__erase_c(this);
|
__get_db()->__erase_c(this);
|
||||||
#endif
|
#endif
|
||||||
@ -1492,7 +1491,7 @@ __hash_table<_Tp, _Hash, _Equal, _Alloc>::operator=(const __hash_table& __u)
|
|||||||
|
|
||||||
template <class _Tp, class _Hash, class _Equal, class _Alloc>
|
template <class _Tp, class _Hash, class _Equal, class _Alloc>
|
||||||
void
|
void
|
||||||
__hash_table<_Tp, _Hash, _Equal, _Alloc>::__deallocate(__next_pointer __np)
|
__hash_table<_Tp, _Hash, _Equal, _Alloc>::__deallocate_node(__next_pointer __np)
|
||||||
_NOEXCEPT
|
_NOEXCEPT
|
||||||
{
|
{
|
||||||
__node_allocator& __na = __node_alloc();
|
__node_allocator& __na = __node_alloc();
|
||||||
@ -1599,11 +1598,11 @@ __hash_table<_Tp, _Hash, _Equal, _Alloc>::__move_assign(
|
|||||||
}
|
}
|
||||||
catch (...)
|
catch (...)
|
||||||
{
|
{
|
||||||
__deallocate(__cache);
|
__deallocate_node(__cache);
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
#endif // _LIBCPP_NO_EXCEPTIONS
|
#endif // _LIBCPP_NO_EXCEPTIONS
|
||||||
__deallocate(__cache);
|
__deallocate_node(__cache);
|
||||||
}
|
}
|
||||||
const_iterator __i = __u.begin();
|
const_iterator __i = __u.begin();
|
||||||
while (__u.size() != 0)
|
while (__u.size() != 0)
|
||||||
@ -1661,11 +1660,11 @@ __hash_table<_Tp, _Hash, _Equal, _Alloc>::__assign_unique(_InputIterator __first
|
|||||||
}
|
}
|
||||||
catch (...)
|
catch (...)
|
||||||
{
|
{
|
||||||
__deallocate(__cache);
|
__deallocate_node(__cache);
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
#endif // _LIBCPP_NO_EXCEPTIONS
|
#endif // _LIBCPP_NO_EXCEPTIONS
|
||||||
__deallocate(__cache);
|
__deallocate_node(__cache);
|
||||||
}
|
}
|
||||||
for (; __first != __last; ++__first)
|
for (; __first != __last; ++__first)
|
||||||
__insert_unique(*__first);
|
__insert_unique(*__first);
|
||||||
@ -1701,11 +1700,11 @@ __hash_table<_Tp, _Hash, _Equal, _Alloc>::__assign_multi(_InputIterator __first,
|
|||||||
}
|
}
|
||||||
catch (...)
|
catch (...)
|
||||||
{
|
{
|
||||||
__deallocate(__cache);
|
__deallocate_node(__cache);
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
#endif // _LIBCPP_NO_EXCEPTIONS
|
#endif // _LIBCPP_NO_EXCEPTIONS
|
||||||
__deallocate(__cache);
|
__deallocate_node(__cache);
|
||||||
}
|
}
|
||||||
for (; __first != __last; ++__first)
|
for (; __first != __last; ++__first)
|
||||||
__insert_multi(_NodeTypes::__get_value(*__first));
|
__insert_multi(_NodeTypes::__get_value(*__first));
|
||||||
@ -1765,7 +1764,7 @@ __hash_table<_Tp, _Hash, _Equal, _Alloc>::clear() _NOEXCEPT
|
|||||||
{
|
{
|
||||||
if (size() > 0)
|
if (size() > 0)
|
||||||
{
|
{
|
||||||
__deallocate(__p1_.first().__next_);
|
__deallocate_node(__p1_.first().__next_);
|
||||||
__p1_.first().__next_ = nullptr;
|
__p1_.first().__next_ = nullptr;
|
||||||
size_type __bc = bucket_count();
|
size_type __bc = bucket_count();
|
||||||
for (size_type __i = 0; __i < __bc; ++__i)
|
for (size_type __i = 0; __i < __bc; ++__i)
|
||||||
|
@ -15,8 +15,6 @@
|
|||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
#include <new>
|
#include <new>
|
||||||
|
|
||||||
#include <__undef___deallocate>
|
|
||||||
|
|
||||||
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
|
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
|
||||||
#pragma GCC system_header
|
#pragma GCC system_header
|
||||||
#endif
|
#endif
|
||||||
@ -64,7 +62,7 @@ public:
|
|||||||
if (__p == (pointer)&buf_)
|
if (__p == (pointer)&buf_)
|
||||||
__allocated_ = false;
|
__allocated_ = false;
|
||||||
else
|
else
|
||||||
_VSTD::__deallocate(__p);
|
_VSTD::__libcpp_deallocate(__p);
|
||||||
}
|
}
|
||||||
_LIBCPP_INLINE_VISIBILITY size_type max_size() const throw() {return size_type(~0) / sizeof(_Tp);}
|
_LIBCPP_INLINE_VISIBILITY size_type max_size() const throw() {return size_type(~0) / sizeof(_Tp);}
|
||||||
|
|
||||||
|
@ -17,39 +17,24 @@
|
|||||||
#pragma GCC system_header
|
#pragma GCC system_header
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef _LIBCPP_HAS_NO_THREADS
|
|
||||||
|
|
||||||
#ifndef __libcpp_has_include
|
|
||||||
#ifndef __has_include
|
|
||||||
#define __libcpp_has_include(x) 0
|
|
||||||
#else
|
|
||||||
#define __libcpp_has_include(x) __has_include(x)
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(_LIBCPP_HAS_THREAD_API_EXTERNAL) && \
|
|
||||||
!__libcpp_has_include(<__external_threading>)
|
|
||||||
// If the <__external_threading> header is absent, build libc++ against a
|
|
||||||
// pthread-oriented thread api but leave out its implementation. This setup
|
|
||||||
// allows building+testing of an externally-threaded library variant (on any
|
|
||||||
// platform that supports pthreads). Here, an 'externally-threaded' library
|
|
||||||
// variant is one where the implementation of the libc++ thread api is provided
|
|
||||||
// as a separate library.
|
|
||||||
#define _LIBCPP_HAS_THREAD_API_EXTERNAL_PTHREAD
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(_LIBCPP_HAS_THREAD_API_EXTERNAL) && \
|
|
||||||
__libcpp_has_include(<__external_threading>)
|
|
||||||
#include <__external_threading>
|
|
||||||
#else
|
|
||||||
|
|
||||||
#if defined(_LIBCPP_HAS_THREAD_API_PTHREAD) || \
|
|
||||||
defined(_LIBCPP_HAS_THREAD_API_EXTERNAL_PTHREAD)
|
|
||||||
#include <pthread.h>
|
|
||||||
#include <sched.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(_LIBCPP_HAS_THREAD_API_EXTERNAL)
|
#if defined(_LIBCPP_HAS_THREAD_API_EXTERNAL)
|
||||||
|
# include <__external_threading>
|
||||||
|
#elif !defined(_LIBCPP_HAS_NO_THREADS)
|
||||||
|
|
||||||
|
#if defined(_LIBCPP_HAS_THREAD_API_PTHREAD)
|
||||||
|
# include <pthread.h>
|
||||||
|
# include <sched.h>
|
||||||
|
#elif defined(_LIBCPP_HAS_THREAD_API_WIN32)
|
||||||
|
#include <assert.h>
|
||||||
|
#include <Windows.h>
|
||||||
|
#include <process.h>
|
||||||
|
#include <fibersapi.h>
|
||||||
|
|
||||||
|
#include <chrono>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(_LIBCPP_HAS_THREAD_LIBRARY_EXTERNAL) || \
|
||||||
|
defined(_LIBCPP_BUILDING_THREAD_LIBRARY_EXTERNAL)
|
||||||
#define _LIBCPP_THREAD_ABI_VISIBILITY _LIBCPP_FUNC_VIS
|
#define _LIBCPP_THREAD_ABI_VISIBILITY _LIBCPP_FUNC_VIS
|
||||||
#else
|
#else
|
||||||
#define _LIBCPP_THREAD_ABI_VISIBILITY inline _LIBCPP_INLINE_VISIBILITY
|
#define _LIBCPP_THREAD_ABI_VISIBILITY inline _LIBCPP_INLINE_VISIBILITY
|
||||||
@ -57,8 +42,7 @@
|
|||||||
|
|
||||||
_LIBCPP_BEGIN_NAMESPACE_STD
|
_LIBCPP_BEGIN_NAMESPACE_STD
|
||||||
|
|
||||||
#if defined(_LIBCPP_HAS_THREAD_API_PTHREAD) || \
|
#if defined(_LIBCPP_HAS_THREAD_API_PTHREAD)
|
||||||
defined(_LIBCPP_HAS_THREAD_API_EXTERNAL_PTHREAD)
|
|
||||||
// Mutex
|
// Mutex
|
||||||
typedef pthread_mutex_t __libcpp_mutex_t;
|
typedef pthread_mutex_t __libcpp_mutex_t;
|
||||||
#define _LIBCPP_MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER
|
#define _LIBCPP_MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER
|
||||||
@ -81,6 +65,33 @@ typedef pthread_t __libcpp_thread_t;
|
|||||||
|
|
||||||
// Thrad Local Storage
|
// Thrad Local Storage
|
||||||
typedef pthread_key_t __libcpp_tls_key;
|
typedef pthread_key_t __libcpp_tls_key;
|
||||||
|
|
||||||
|
#define _LIBCPP_TLS_DESTRUCTOR_CC
|
||||||
|
#else
|
||||||
|
// Mutex
|
||||||
|
typedef SRWLOCK __libcpp_mutex_t;
|
||||||
|
#define _LIBCPP_MUTEX_INITIALIZER SRWLOCK_INIT
|
||||||
|
|
||||||
|
typedef CRITICAL_SECTION __libcpp_recursive_mutex_t;
|
||||||
|
|
||||||
|
// Condition Variable
|
||||||
|
typedef CONDITION_VARIABLE __libcpp_condvar_t;
|
||||||
|
#define _LIBCPP_CONDVAR_INITIALIZER CONDITION_VARIABLE_INIT
|
||||||
|
|
||||||
|
// Execute Once
|
||||||
|
typedef INIT_ONCE __libcpp_exec_once_flag;
|
||||||
|
#define _LIBCPP_EXEC_ONCE_INITIALIZER INIT_ONCE_STATIC_INIT
|
||||||
|
|
||||||
|
// Thread ID
|
||||||
|
typedef DWORD __libcpp_thread_id;
|
||||||
|
|
||||||
|
// Thread
|
||||||
|
typedef HANDLE __libcpp_thread_t;
|
||||||
|
|
||||||
|
// Thread Local Storage
|
||||||
|
typedef DWORD __libcpp_tls_key;
|
||||||
|
|
||||||
|
#define _LIBCPP_TLS_DESTRUCTOR_CC WINAPI
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Mutex
|
// Mutex
|
||||||
@ -167,7 +178,8 @@ void __libcpp_thread_yield();
|
|||||||
|
|
||||||
// Thread local storage
|
// Thread local storage
|
||||||
_LIBCPP_THREAD_ABI_VISIBILITY
|
_LIBCPP_THREAD_ABI_VISIBILITY
|
||||||
int __libcpp_tls_create(__libcpp_tls_key *__key, void (*__at_exit)(void *));
|
int __libcpp_tls_create(__libcpp_tls_key* __key,
|
||||||
|
void(_LIBCPP_TLS_DESTRUCTOR_CC* __at_exit)(void*));
|
||||||
|
|
||||||
_LIBCPP_THREAD_ABI_VISIBILITY
|
_LIBCPP_THREAD_ABI_VISIBILITY
|
||||||
void *__libcpp_tls_get(__libcpp_tls_key __key);
|
void *__libcpp_tls_get(__libcpp_tls_key __key);
|
||||||
@ -175,8 +187,10 @@ void *__libcpp_tls_get(__libcpp_tls_key __key);
|
|||||||
_LIBCPP_THREAD_ABI_VISIBILITY
|
_LIBCPP_THREAD_ABI_VISIBILITY
|
||||||
int __libcpp_tls_set(__libcpp_tls_key __key, void *__p);
|
int __libcpp_tls_set(__libcpp_tls_key __key, void *__p);
|
||||||
|
|
||||||
#if defined(_LIBCPP_HAS_THREAD_API_PTHREAD) || \
|
#if !defined(_LIBCPP_HAS_THREAD_LIBRARY_EXTERNAL) || \
|
||||||
defined(_LIBCPP_BUILDING_THREAD_API_EXTERNAL_PTHREAD)
|
defined(_LIBCPP_BUILDING_THREAD_LIBRARY_EXTERNAL)
|
||||||
|
|
||||||
|
#if defined(_LIBCPP_HAS_THREAD_API_PTHREAD)
|
||||||
|
|
||||||
int __libcpp_recursive_mutex_init(__libcpp_recursive_mutex_t *__m)
|
int __libcpp_recursive_mutex_init(__libcpp_recursive_mutex_t *__m)
|
||||||
{
|
{
|
||||||
@ -342,12 +356,230 @@ int __libcpp_tls_set(__libcpp_tls_key __key, void *__p)
|
|||||||
return pthread_setspecific(__key, __p);
|
return pthread_setspecific(__key, __p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#elif defined(_LIBCPP_HAS_THREAD_API_WIN32)
|
||||||
|
|
||||||
|
// Mutex
|
||||||
|
int __libcpp_recursive_mutex_init(__libcpp_recursive_mutex_t *__m)
|
||||||
|
{
|
||||||
|
InitializeCriticalSection(__m);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int __libcpp_recursive_mutex_lock(__libcpp_recursive_mutex_t *__m)
|
||||||
|
{
|
||||||
|
EnterCriticalSection(__m);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int __libcpp_recursive_mutex_trylock(__libcpp_recursive_mutex_t *__m)
|
||||||
|
{
|
||||||
|
TryEnterCriticalSection(__m);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int __libcpp_recursive_mutex_unlock(__libcpp_recursive_mutex_t *__m)
|
||||||
|
{
|
||||||
|
LeaveCriticalSection(__m);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int __libcpp_recursive_mutex_destroy(__libcpp_recursive_mutex_t *__m)
|
||||||
|
{
|
||||||
|
static_cast<void>(__m);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int __libcpp_mutex_lock(__libcpp_mutex_t *__m)
|
||||||
|
{
|
||||||
|
AcquireSRWLockExclusive(__m);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int __libcpp_mutex_trylock(__libcpp_mutex_t *__m)
|
||||||
|
{
|
||||||
|
TryAcquireSRWLockExclusive(__m);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int __libcpp_mutex_unlock(__libcpp_mutex_t *__m)
|
||||||
|
{
|
||||||
|
ReleaseSRWLockExclusive(__m);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int __libcpp_mutex_destroy(__libcpp_mutex_t *__m)
|
||||||
|
{
|
||||||
|
static_cast<void>(__m);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Condition Variable
|
||||||
|
int __libcpp_condvar_signal(__libcpp_condvar_t *__cv)
|
||||||
|
{
|
||||||
|
WakeConditionVariable(__cv);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int __libcpp_condvar_broadcast(__libcpp_condvar_t *__cv)
|
||||||
|
{
|
||||||
|
WakeAllConditionVariable(__cv);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int __libcpp_condvar_wait(__libcpp_condvar_t *__cv, __libcpp_mutex_t *__m)
|
||||||
|
{
|
||||||
|
SleepConditionVariableSRW(__cv, __m, INFINITE, 0);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int __libcpp_condvar_timedwait(__libcpp_condvar_t *__cv, __libcpp_mutex_t *__m,
|
||||||
|
timespec *__ts)
|
||||||
|
{
|
||||||
|
using namespace _VSTD::chrono;
|
||||||
|
|
||||||
|
auto duration = seconds(__ts->tv_sec) + nanoseconds(__ts->tv_nsec);
|
||||||
|
auto abstime =
|
||||||
|
system_clock::time_point(duration_cast<system_clock::duration>(duration));
|
||||||
|
auto timeout_ms = duration_cast<milliseconds>(abstime - system_clock::now());
|
||||||
|
|
||||||
|
if (!SleepConditionVariableSRW(__cv, __m,
|
||||||
|
timeout_ms.count() > 0 ? timeout_ms.count()
|
||||||
|
: 0,
|
||||||
|
0))
|
||||||
|
return GetLastError();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int __libcpp_condvar_destroy(__libcpp_condvar_t *__cv)
|
||||||
|
{
|
||||||
|
static_cast<void>(__cv);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Execute Once
|
||||||
|
static inline _LIBCPP_ALWAYS_INLINE BOOL CALLBACK
|
||||||
|
__libcpp_init_once_execute_once_thunk(PINIT_ONCE __init_once, PVOID __parameter,
|
||||||
|
PVOID *__context)
|
||||||
|
{
|
||||||
|
static_cast<void>(__init_once);
|
||||||
|
static_cast<void>(__context);
|
||||||
|
|
||||||
|
void (*init_routine)(void) = reinterpret_cast<void (*)(void)>(__parameter);
|
||||||
|
init_routine();
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
int __libcpp_execute_once(__libcpp_exec_once_flag *__flag,
|
||||||
|
void (*__init_routine)(void))
|
||||||
|
{
|
||||||
|
if (!InitOnceExecuteOnce(__flag, __libcpp_init_once_execute_once_thunk,
|
||||||
|
reinterpret_cast<void *>(__init_routine), NULL))
|
||||||
|
return GetLastError();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Thread ID
|
||||||
|
bool __libcpp_thread_id_equal(__libcpp_thread_id __lhs,
|
||||||
|
__libcpp_thread_id __rhs)
|
||||||
|
{
|
||||||
|
return __lhs == __rhs;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool __libcpp_thread_id_less(__libcpp_thread_id __lhs, __libcpp_thread_id __rhs)
|
||||||
|
{
|
||||||
|
return __lhs < __rhs;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Thread
|
||||||
|
struct __libcpp_beginthreadex_thunk_data
|
||||||
|
{
|
||||||
|
void *(*__func)(void *);
|
||||||
|
void *__arg;
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline _LIBCPP_ALWAYS_INLINE unsigned int WINAPI
|
||||||
|
__libcpp_beginthreadex_thunk(void *__data)
|
||||||
|
{
|
||||||
|
__libcpp_beginthreadex_thunk_data data =
|
||||||
|
*reinterpret_cast<__libcpp_beginthreadex_thunk_data *>(__data);
|
||||||
|
delete reinterpret_cast<__libcpp_beginthreadex_thunk_data *>(__data);
|
||||||
|
return reinterpret_cast<unsigned int>(data.__func(data.__arg));
|
||||||
|
}
|
||||||
|
|
||||||
|
int __libcpp_thread_create(__libcpp_thread_t *__t, void *(*__func)(void *),
|
||||||
|
void *__arg)
|
||||||
|
{
|
||||||
|
auto *data = new __libcpp_beginthreadex_thunk_data;
|
||||||
|
data->__func = __func;
|
||||||
|
data->__arg = __arg;
|
||||||
|
|
||||||
|
*__t = reinterpret_cast<HANDLE>(_beginthreadex(NULL, 0,
|
||||||
|
__libcpp_beginthreadex_thunk,
|
||||||
|
data, 0, NULL));
|
||||||
|
if (*__t)
|
||||||
|
return 0;
|
||||||
|
return GetLastError();
|
||||||
|
}
|
||||||
|
|
||||||
|
__libcpp_thread_id __libcpp_thread_get_current_id()
|
||||||
|
{
|
||||||
|
return GetCurrentThreadId();
|
||||||
|
}
|
||||||
|
|
||||||
|
__libcpp_thread_id __libcpp_thread_get_id(const __libcpp_thread_t *__t)
|
||||||
|
{
|
||||||
|
return GetThreadId(*__t);
|
||||||
|
}
|
||||||
|
|
||||||
|
int __libcpp_thread_join(__libcpp_thread_t *__t)
|
||||||
|
{
|
||||||
|
if (WaitForSingleObjectEx(*__t, INFINITE, FALSE) == WAIT_FAILED)
|
||||||
|
return GetLastError();
|
||||||
|
if (!CloseHandle(*__t))
|
||||||
|
return GetLastError();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int __libcpp_thread_detach(__libcpp_thread_t *__t)
|
||||||
|
{
|
||||||
|
if (!CloseHandle(*__t))
|
||||||
|
return GetLastError();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void __libcpp_thread_yield()
|
||||||
|
{
|
||||||
|
SwitchToThread();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Thread Local Storage
|
||||||
|
int __libcpp_tls_create(__libcpp_tls_key* __key,
|
||||||
|
void(_LIBCPP_TLS_DESTRUCTOR_CC* __at_exit)(void*))
|
||||||
|
{
|
||||||
|
*__key = FlsAlloc(__at_exit);
|
||||||
|
if (*__key == FLS_OUT_OF_INDEXES)
|
||||||
|
return GetLastError();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void *__libcpp_tls_get(__libcpp_tls_key __key)
|
||||||
|
{
|
||||||
|
return FlsGetValue(__key);
|
||||||
|
}
|
||||||
|
|
||||||
|
int __libcpp_tls_set(__libcpp_tls_key __key, void *__p)
|
||||||
|
{
|
||||||
|
if (!FlsSetValue(__key, __p))
|
||||||
|
return GetLastError();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
#endif // _LIBCPP_HAS_THREAD_API_PTHREAD
|
#endif // _LIBCPP_HAS_THREAD_API_PTHREAD
|
||||||
|
|
||||||
|
#endif // !_LIBCPP_HAS_THREAD_LIBRARY_EXTERNAL || _LIBCPP_BUILDING_THREAD_LIBRARY_EXTERNAL
|
||||||
|
|
||||||
_LIBCPP_END_NAMESPACE_STD
|
_LIBCPP_END_NAMESPACE_STD
|
||||||
|
|
||||||
#endif // !_LIBCPP_HAS_THREAD_API_EXTERNAL || !__libcpp_has_include(<__external_threading>)
|
#endif // !_LIBCPP_HAS_NO_THREADS
|
||||||
|
|
||||||
#endif // _LIBCPP_HAS_NO_THREADS
|
|
||||||
|
|
||||||
#endif // _LIBCPP_THREADING_SUPPORT
|
#endif // _LIBCPP_THREADING_SUPPORT
|
||||||
|
@ -1,20 +0,0 @@
|
|||||||
// -*- C++ -*-
|
|
||||||
//===----------------------------------------------------------------------===//
|
|
||||||
//
|
|
||||||
// The LLVM Compiler Infrastructure
|
|
||||||
//
|
|
||||||
// This file is dual licensed under the MIT and the University of Illinois Open
|
|
||||||
// Source Licenses. See LICENSE.TXT for details.
|
|
||||||
//
|
|
||||||
//===----------------------------------------------------------------------===//
|
|
||||||
|
|
||||||
#ifdef __deallocate
|
|
||||||
#if !defined(_LIBCPP_DISABLE_MACRO_CONFLICT_WARNINGS)
|
|
||||||
#if defined(_MSC_VER) && !defined(__clang__)
|
|
||||||
_LIBCPP_WARNING("macro __deallocate is incompatible with C++. #undefining __deallocate")
|
|
||||||
#else
|
|
||||||
#warning: macro __deallocate is incompatible with C++. #undefining __deallocate
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#undef __deallocate
|
|
||||||
#endif
|
|
@ -3100,28 +3100,28 @@ template <class _PopulationIterator, class _SampleIterator, class _Distance,
|
|||||||
class _UniformRandomNumberGenerator>
|
class _UniformRandomNumberGenerator>
|
||||||
_LIBCPP_INLINE_VISIBILITY
|
_LIBCPP_INLINE_VISIBILITY
|
||||||
_SampleIterator __sample(_PopulationIterator __first,
|
_SampleIterator __sample(_PopulationIterator __first,
|
||||||
_PopulationIterator __last, _SampleIterator __out,
|
_PopulationIterator __last, _SampleIterator __output,
|
||||||
_Distance __n,
|
_Distance __n,
|
||||||
_UniformRandomNumberGenerator & __g,
|
_UniformRandomNumberGenerator & __g,
|
||||||
input_iterator_tag) {
|
input_iterator_tag) {
|
||||||
|
|
||||||
_Distance __k = 0;
|
_Distance __k = 0;
|
||||||
for (; __first != __last && __k < __n; ++__first, (void)++__k)
|
for (; __first != __last && __k < __n; ++__first, (void)++__k)
|
||||||
__out[__k] = *__first;
|
__output[__k] = *__first;
|
||||||
_Distance __sz = __k;
|
_Distance __sz = __k;
|
||||||
for (; __first != __last; ++__first, (void)++__k) {
|
for (; __first != __last; ++__first, (void)++__k) {
|
||||||
_Distance __r = _VSTD::uniform_int_distribution<_Distance>(0, __k)(__g);
|
_Distance __r = _VSTD::uniform_int_distribution<_Distance>(0, __k)(__g);
|
||||||
if (__r < __sz)
|
if (__r < __sz)
|
||||||
__out[__r] = *__first;
|
__output[__r] = *__first;
|
||||||
}
|
}
|
||||||
return __out + _VSTD::min(__n, __k);
|
return __output + _VSTD::min(__n, __k);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class _PopulationIterator, class _SampleIterator, class _Distance,
|
template <class _PopulationIterator, class _SampleIterator, class _Distance,
|
||||||
class _UniformRandomNumberGenerator>
|
class _UniformRandomNumberGenerator>
|
||||||
_LIBCPP_INLINE_VISIBILITY
|
_LIBCPP_INLINE_VISIBILITY
|
||||||
_SampleIterator __sample(_PopulationIterator __first,
|
_SampleIterator __sample(_PopulationIterator __first,
|
||||||
_PopulationIterator __last, _SampleIterator __out,
|
_PopulationIterator __last, _SampleIterator __output,
|
||||||
_Distance __n,
|
_Distance __n,
|
||||||
_UniformRandomNumberGenerator& __g,
|
_UniformRandomNumberGenerator& __g,
|
||||||
forward_iterator_tag) {
|
forward_iterator_tag) {
|
||||||
@ -3130,18 +3130,18 @@ _SampleIterator __sample(_PopulationIterator __first,
|
|||||||
_Distance __r =
|
_Distance __r =
|
||||||
_VSTD::uniform_int_distribution<_Distance>(0, --__unsampled_sz)(__g);
|
_VSTD::uniform_int_distribution<_Distance>(0, --__unsampled_sz)(__g);
|
||||||
if (__r < __n) {
|
if (__r < __n) {
|
||||||
*__out++ = *__first;
|
*__output++ = *__first;
|
||||||
--__n;
|
--__n;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return __out;
|
return __output;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class _PopulationIterator, class _SampleIterator, class _Distance,
|
template <class _PopulationIterator, class _SampleIterator, class _Distance,
|
||||||
class _UniformRandomNumberGenerator>
|
class _UniformRandomNumberGenerator>
|
||||||
_LIBCPP_INLINE_VISIBILITY
|
_LIBCPP_INLINE_VISIBILITY
|
||||||
_SampleIterator __sample(_PopulationIterator __first,
|
_SampleIterator __sample(_PopulationIterator __first,
|
||||||
_PopulationIterator __last, _SampleIterator __out,
|
_PopulationIterator __last, _SampleIterator __output,
|
||||||
_Distance __n, _UniformRandomNumberGenerator& __g) {
|
_Distance __n, _UniformRandomNumberGenerator& __g) {
|
||||||
typedef typename iterator_traits<_PopulationIterator>::iterator_category
|
typedef typename iterator_traits<_PopulationIterator>::iterator_category
|
||||||
_PopCategory;
|
_PopCategory;
|
||||||
@ -3153,7 +3153,7 @@ _SampleIterator __sample(_PopulationIterator __first,
|
|||||||
typedef typename common_type<_Distance, _Difference>::type _CommonType;
|
typedef typename common_type<_Distance, _Difference>::type _CommonType;
|
||||||
_LIBCPP_ASSERT(__n >= 0, "N must be a positive number.");
|
_LIBCPP_ASSERT(__n >= 0, "N must be a positive number.");
|
||||||
return _VSTD::__sample(
|
return _VSTD::__sample(
|
||||||
__first, __last, __out, _CommonType(__n),
|
__first, __last, __output, _CommonType(__n),
|
||||||
__g, _PopCategory());
|
__g, _PopCategory());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3162,9 +3162,9 @@ template <class _PopulationIterator, class _SampleIterator, class _Distance,
|
|||||||
class _UniformRandomNumberGenerator>
|
class _UniformRandomNumberGenerator>
|
||||||
inline _LIBCPP_INLINE_VISIBILITY
|
inline _LIBCPP_INLINE_VISIBILITY
|
||||||
_SampleIterator sample(_PopulationIterator __first,
|
_SampleIterator sample(_PopulationIterator __first,
|
||||||
_PopulationIterator __last, _SampleIterator __out,
|
_PopulationIterator __last, _SampleIterator __output,
|
||||||
_Distance __n, _UniformRandomNumberGenerator&& __g) {
|
_Distance __n, _UniformRandomNumberGenerator&& __g) {
|
||||||
return _VSTD::__sample(__first, __last, __out, __n, __g);
|
return _VSTD::__sample(__first, __last, __output, __n, __g);
|
||||||
}
|
}
|
||||||
#endif // _LIBCPP_STD_VER > 14
|
#endif // _LIBCPP_STD_VER > 14
|
||||||
|
|
||||||
|
@ -943,16 +943,16 @@ struct __atomic_base // false
|
|||||||
|
|
||||||
_LIBCPP_INLINE_VISIBILITY
|
_LIBCPP_INLINE_VISIBILITY
|
||||||
_LIBCPP_CONSTEXPR __atomic_base(_Tp __d) _NOEXCEPT : __a_(__d) {}
|
_LIBCPP_CONSTEXPR __atomic_base(_Tp __d) _NOEXCEPT : __a_(__d) {}
|
||||||
#ifndef _LIBCPP_HAS_NO_DELETED_FUNCTIONS
|
#ifndef _LIBCPP_CXX03_LANG
|
||||||
__atomic_base(const __atomic_base&) = delete;
|
__atomic_base(const __atomic_base&) = delete;
|
||||||
__atomic_base& operator=(const __atomic_base&) = delete;
|
__atomic_base& operator=(const __atomic_base&) = delete;
|
||||||
__atomic_base& operator=(const __atomic_base&) volatile = delete;
|
__atomic_base& operator=(const __atomic_base&) volatile = delete;
|
||||||
#else // _LIBCPP_HAS_NO_DELETED_FUNCTIONS
|
#else
|
||||||
private:
|
private:
|
||||||
__atomic_base(const __atomic_base&);
|
__atomic_base(const __atomic_base&);
|
||||||
__atomic_base& operator=(const __atomic_base&);
|
__atomic_base& operator=(const __atomic_base&);
|
||||||
__atomic_base& operator=(const __atomic_base&) volatile;
|
__atomic_base& operator=(const __atomic_base&) volatile;
|
||||||
#endif // _LIBCPP_HAS_NO_DELETED_FUNCTIONS
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
#if defined(__cpp_lib_atomic_is_always_lock_free)
|
#if defined(__cpp_lib_atomic_is_always_lock_free)
|
||||||
@ -1699,16 +1699,16 @@ typedef struct atomic_flag
|
|||||||
_LIBCPP_INLINE_VISIBILITY
|
_LIBCPP_INLINE_VISIBILITY
|
||||||
atomic_flag(bool __b) _NOEXCEPT : __a_(__b) {} // EXTENSION
|
atomic_flag(bool __b) _NOEXCEPT : __a_(__b) {} // EXTENSION
|
||||||
|
|
||||||
#ifndef _LIBCPP_HAS_NO_DELETED_FUNCTIONS
|
#ifndef _LIBCPP_CXX03_LANG
|
||||||
atomic_flag(const atomic_flag&) = delete;
|
atomic_flag(const atomic_flag&) = delete;
|
||||||
atomic_flag& operator=(const atomic_flag&) = delete;
|
atomic_flag& operator=(const atomic_flag&) = delete;
|
||||||
atomic_flag& operator=(const atomic_flag&) volatile = delete;
|
atomic_flag& operator=(const atomic_flag&) volatile = delete;
|
||||||
#else // _LIBCPP_HAS_NO_DELETED_FUNCTIONS
|
#else
|
||||||
private:
|
private:
|
||||||
atomic_flag(const atomic_flag&);
|
atomic_flag(const atomic_flag&);
|
||||||
atomic_flag& operator=(const atomic_flag&);
|
atomic_flag& operator=(const atomic_flag&);
|
||||||
atomic_flag& operator=(const atomic_flag&) volatile;
|
atomic_flag& operator=(const atomic_flag&) volatile;
|
||||||
#endif // _LIBCPP_HAS_NO_DELETED_FUNCTIONS
|
#endif
|
||||||
} atomic_flag;
|
} atomic_flag;
|
||||||
|
|
||||||
inline _LIBCPP_INLINE_VISIBILITY
|
inline _LIBCPP_INLINE_VISIBILITY
|
||||||
|
@ -60,9 +60,9 @@ template <class _PopulationIterator, class _SampleIterator, class _Distance,
|
|||||||
class _UniformRandomNumberGenerator>
|
class _UniformRandomNumberGenerator>
|
||||||
inline _LIBCPP_INLINE_VISIBILITY
|
inline _LIBCPP_INLINE_VISIBILITY
|
||||||
_SampleIterator sample(_PopulationIterator __first, _PopulationIterator __last,
|
_SampleIterator sample(_PopulationIterator __first, _PopulationIterator __last,
|
||||||
_SampleIterator __out, _Distance __n,
|
_SampleIterator __output, _Distance __n,
|
||||||
_UniformRandomNumberGenerator &&__g) {
|
_UniformRandomNumberGenerator &&__g) {
|
||||||
return _VSTD::__sample(__first, __last, __out, __n, __g);
|
return _VSTD::__sample(__first, __last, __output, __n, __g);
|
||||||
}
|
}
|
||||||
|
|
||||||
_LIBCPP_END_NAMESPACE_LFTS
|
_LIBCPP_END_NAMESPACE_LFTS
|
||||||
|
@ -11,9 +11,6 @@
|
|||||||
#ifndef _LIBCPP_DYNARRAY
|
#ifndef _LIBCPP_DYNARRAY
|
||||||
#define _LIBCPP_DYNARRAY
|
#define _LIBCPP_DYNARRAY
|
||||||
|
|
||||||
#include <__config>
|
|
||||||
#if _LIBCPP_STD_VER > 11
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
dynarray synopsis
|
dynarray synopsis
|
||||||
|
|
||||||
@ -96,6 +93,8 @@ public:
|
|||||||
}} // std::experimental
|
}} // std::experimental
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
#include <__config>
|
||||||
|
#if _LIBCPP_STD_VER > 11
|
||||||
|
|
||||||
#include <__functional_base>
|
#include <__functional_base>
|
||||||
#include <iterator>
|
#include <iterator>
|
||||||
@ -104,8 +103,6 @@ public:
|
|||||||
#include <new>
|
#include <new>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
#include <__undef___deallocate>
|
|
||||||
|
|
||||||
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
|
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
|
||||||
#pragma GCC system_header
|
#pragma GCC system_header
|
||||||
#endif
|
#endif
|
||||||
@ -143,9 +140,9 @@ private:
|
|||||||
return static_cast<value_type *> (_VSTD::__allocate (sizeof(value_type) * count));
|
return static_cast<value_type *> (_VSTD::__allocate (sizeof(value_type) * count));
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline _LIBCPP_INLINE_VISIBILITY void __deallocate ( value_type* __ptr ) noexcept
|
static inline _LIBCPP_INLINE_VISIBILITY void __deallocate_value( value_type* __ptr ) noexcept
|
||||||
{
|
{
|
||||||
_VSTD::__deallocate (static_cast<void *> (__ptr));
|
_VSTD::__libcpp_deallocate (static_cast<void *> (__ptr));
|
||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -265,7 +262,7 @@ dynarray<_Tp>::~dynarray()
|
|||||||
value_type *__data = data () + __size_;
|
value_type *__data = data () + __size_;
|
||||||
for ( size_t i = 0; i < __size_; ++i )
|
for ( size_t i = 0; i < __size_; ++i )
|
||||||
(--__data)->value_type::~value_type();
|
(--__data)->value_type::~value_type();
|
||||||
__deallocate ( __base_ );
|
__deallocate_value( __base_ );
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class _Tp>
|
template <class _Tp>
|
||||||
|
@ -75,19 +75,19 @@ public:
|
|||||||
typedef void reference;
|
typedef void reference;
|
||||||
|
|
||||||
ostream_joiner(ostream_type& __os, _Delim&& __d)
|
ostream_joiner(ostream_type& __os, _Delim&& __d)
|
||||||
: __out(_VSTD::addressof(__os)), __delim(_VSTD::move(__d)), __first(true) {}
|
: __output(_VSTD::addressof(__os)), __delim(_VSTD::move(__d)), __first(true) {}
|
||||||
|
|
||||||
ostream_joiner(ostream_type& __os, const _Delim& __d)
|
ostream_joiner(ostream_type& __os, const _Delim& __d)
|
||||||
: __out(_VSTD::addressof(__os)), __delim(__d), __first(true) {}
|
: __output(_VSTD::addressof(__os)), __delim(__d), __first(true) {}
|
||||||
|
|
||||||
|
|
||||||
template<typename _Tp>
|
template<typename _Tp>
|
||||||
ostream_joiner& operator=(const _Tp& __v)
|
ostream_joiner& operator=(const _Tp& __v)
|
||||||
{
|
{
|
||||||
if (!__first)
|
if (!__first)
|
||||||
*__out << __delim;
|
*__output << __delim;
|
||||||
__first = false;
|
__first = false;
|
||||||
*__out << __v;
|
*__output << __v;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -96,7 +96,7 @@ public:
|
|||||||
ostream_joiner& operator++(int) _NOEXCEPT { return *this; }
|
ostream_joiner& operator++(int) _NOEXCEPT { return *this; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ostream_type* __out;
|
ostream_type* __output;
|
||||||
_Delim __delim;
|
_Delim __delim;
|
||||||
bool __first;
|
bool __first;
|
||||||
};
|
};
|
||||||
|
@ -205,14 +205,9 @@ protected:
|
|||||||
basic_ios<char_type, traits_type>::swap(__rhs);
|
basic_ios<char_type, traits_type>::swap(__rhs);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if _LIBCPP_STD_VER > 11
|
#ifndef _LIBCPP_CXX03_LANG
|
||||||
#ifndef _LIBCPP_HAS_NO_DELETED_FUNCTIONS
|
|
||||||
basic_istream (const basic_istream& __rhs) = delete;
|
basic_istream (const basic_istream& __rhs) = delete;
|
||||||
basic_istream& operator=(const basic_istream& __rhs) = delete;
|
basic_istream& operator=(const basic_istream& __rhs) = delete;
|
||||||
#else
|
|
||||||
basic_istream (const basic_istream& __rhs); // not defined
|
|
||||||
basic_istream& operator=(const basic_istream& __rhs); // not defined
|
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
@ -644,7 +644,6 @@ void* align(size_t alignment, size_t size, void*& ptr, size_t& space);
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <__undef_min_max>
|
#include <__undef_min_max>
|
||||||
#include <__undef___deallocate>
|
|
||||||
|
|
||||||
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
|
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
|
||||||
#pragma GCC system_header
|
#pragma GCC system_header
|
||||||
@ -1772,7 +1771,7 @@ public:
|
|||||||
return static_cast<pointer>(_VSTD::__allocate(__n * sizeof(_Tp)));
|
return static_cast<pointer>(_VSTD::__allocate(__n * sizeof(_Tp)));
|
||||||
}
|
}
|
||||||
_LIBCPP_INLINE_VISIBILITY void deallocate(pointer __p, size_type) _NOEXCEPT
|
_LIBCPP_INLINE_VISIBILITY void deallocate(pointer __p, size_type) _NOEXCEPT
|
||||||
{_VSTD::__deallocate((void*)__p);}
|
{_VSTD::__libcpp_deallocate((void*)__p);}
|
||||||
_LIBCPP_INLINE_VISIBILITY size_type max_size() const _NOEXCEPT
|
_LIBCPP_INLINE_VISIBILITY size_type max_size() const _NOEXCEPT
|
||||||
{return size_type(~0) / sizeof(_Tp);}
|
{return size_type(~0) / sizeof(_Tp);}
|
||||||
#if !defined(_LIBCPP_HAS_NO_RVALUE_REFERENCES) && !defined(_LIBCPP_HAS_NO_VARIADICS)
|
#if !defined(_LIBCPP_HAS_NO_RVALUE_REFERENCES) && !defined(_LIBCPP_HAS_NO_VARIADICS)
|
||||||
@ -1868,7 +1867,7 @@ public:
|
|||||||
return static_cast<pointer>(_VSTD::__allocate(__n * sizeof(_Tp)));
|
return static_cast<pointer>(_VSTD::__allocate(__n * sizeof(_Tp)));
|
||||||
}
|
}
|
||||||
_LIBCPP_INLINE_VISIBILITY void deallocate(pointer __p, size_type) _NOEXCEPT
|
_LIBCPP_INLINE_VISIBILITY void deallocate(pointer __p, size_type) _NOEXCEPT
|
||||||
{_VSTD::__deallocate((void*)__p);}
|
{_VSTD::__libcpp_deallocate((void*)__p);}
|
||||||
_LIBCPP_INLINE_VISIBILITY size_type max_size() const _NOEXCEPT
|
_LIBCPP_INLINE_VISIBILITY size_type max_size() const _NOEXCEPT
|
||||||
{return size_type(~0) / sizeof(_Tp);}
|
{return size_type(~0) / sizeof(_Tp);}
|
||||||
#if !defined(_LIBCPP_HAS_NO_RVALUE_REFERENCES) && !defined(_LIBCPP_HAS_NO_VARIADICS)
|
#if !defined(_LIBCPP_HAS_NO_RVALUE_REFERENCES) && !defined(_LIBCPP_HAS_NO_VARIADICS)
|
||||||
@ -3345,12 +3344,13 @@ struct __scalar_hash<_Tp, 4>
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct _PairT {
|
||||||
|
size_t first;
|
||||||
|
size_t second;
|
||||||
|
};
|
||||||
|
|
||||||
_LIBCPP_INLINE_VISIBILITY
|
_LIBCPP_INLINE_VISIBILITY
|
||||||
inline size_t __hash_combine(size_t __lhs, size_t __rhs) _NOEXCEPT {
|
inline size_t __hash_combine(size_t __lhs, size_t __rhs) _NOEXCEPT {
|
||||||
struct _PairT {
|
|
||||||
size_t first;
|
|
||||||
size_t second;
|
|
||||||
};
|
|
||||||
typedef __scalar_hash<_PairT> _HashT;
|
typedef __scalar_hash<_PairT> _HashT;
|
||||||
const _PairT __p = {__lhs, __rhs};
|
const _PairT __p = {__lhs, __rhs};
|
||||||
return _HashT()(__p);
|
return _HashT()(__p);
|
||||||
|
@ -485,7 +485,6 @@ module std [system] {
|
|||||||
module __tree { header "__tree" export * }
|
module __tree { header "__tree" export * }
|
||||||
module __tuple { header "__tuple" export * }
|
module __tuple { header "__tuple" export * }
|
||||||
module __undef_min_max { header "__undef_min_max" export * }
|
module __undef_min_max { header "__undef_min_max" export * }
|
||||||
module __undef___deallocate { header "__undef___deallocate" export * }
|
|
||||||
|
|
||||||
module experimental {
|
module experimental {
|
||||||
requires cplusplus11
|
requires cplusplus11
|
||||||
|
@ -92,8 +92,6 @@ void operator delete[](void* ptr, void*) noexcept;
|
|||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <__undef___deallocate>
|
|
||||||
|
|
||||||
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
|
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
|
||||||
#pragma GCC system_header
|
#pragma GCC system_header
|
||||||
#endif
|
#endif
|
||||||
@ -217,7 +215,7 @@ inline _LIBCPP_INLINE_VISIBILITY void *__allocate(size_t __size) {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
inline _LIBCPP_INLINE_VISIBILITY void __deallocate(void *__ptr) {
|
inline _LIBCPP_INLINE_VISIBILITY void __libcpp_deallocate(void *__ptr) {
|
||||||
#ifdef _LIBCPP_HAS_NO_BUILTIN_OPERATOR_NEW_DELETE
|
#ifdef _LIBCPP_HAS_NO_BUILTIN_OPERATOR_NEW_DELETE
|
||||||
::operator delete(__ptr);
|
::operator delete(__ptr);
|
||||||
#else
|
#else
|
||||||
|
@ -179,7 +179,7 @@ protected:
|
|||||||
void swap(basic_ostream& __rhs)
|
void swap(basic_ostream& __rhs)
|
||||||
{ basic_ios<char_type, traits_type>::swap(__rhs); }
|
{ basic_ios<char_type, traits_type>::swap(__rhs); }
|
||||||
|
|
||||||
#ifndef _LIBCPP_HAS_NO_DELETED_FUNCTIONS
|
#ifndef _LIBCPP_CXX03_LANG
|
||||||
basic_ostream (const basic_ostream& __rhs) = delete;
|
basic_ostream (const basic_ostream& __rhs) = delete;
|
||||||
basic_ostream& operator=(const basic_ostream& __rhs) = delete;
|
basic_ostream& operator=(const basic_ostream& __rhs) = delete;
|
||||||
#else
|
#else
|
||||||
|
@ -5262,15 +5262,15 @@ public:
|
|||||||
// format:
|
// format:
|
||||||
template <class _OutputIter>
|
template <class _OutputIter>
|
||||||
_OutputIter
|
_OutputIter
|
||||||
format(_OutputIter __out, const char_type* __fmt_first,
|
format(_OutputIter __output, const char_type* __fmt_first,
|
||||||
const char_type* __fmt_last,
|
const char_type* __fmt_last,
|
||||||
regex_constants::match_flag_type __flags = regex_constants::format_default) const;
|
regex_constants::match_flag_type __flags = regex_constants::format_default) const;
|
||||||
template <class _OutputIter, class _ST, class _SA>
|
template <class _OutputIter, class _ST, class _SA>
|
||||||
_LIBCPP_INLINE_VISIBILITY
|
_LIBCPP_INLINE_VISIBILITY
|
||||||
_OutputIter
|
_OutputIter
|
||||||
format(_OutputIter __out, const basic_string<char_type, _ST, _SA>& __fmt,
|
format(_OutputIter __output, const basic_string<char_type, _ST, _SA>& __fmt,
|
||||||
regex_constants::match_flag_type __flags = regex_constants::format_default) const
|
regex_constants::match_flag_type __flags = regex_constants::format_default) const
|
||||||
{return format(__out, __fmt.data(), __fmt.data() + __fmt.size(), __flags);}
|
{return format(__output, __fmt.data(), __fmt.data() + __fmt.size(), __flags);}
|
||||||
template <class _ST, class _SA>
|
template <class _ST, class _SA>
|
||||||
_LIBCPP_INLINE_VISIBILITY
|
_LIBCPP_INLINE_VISIBILITY
|
||||||
basic_string<char_type, _ST, _SA>
|
basic_string<char_type, _ST, _SA>
|
||||||
@ -5382,7 +5382,7 @@ match_results<_BidirectionalIterator, _Allocator>::__init(unsigned __s,
|
|||||||
template <class _BidirectionalIterator, class _Allocator>
|
template <class _BidirectionalIterator, class _Allocator>
|
||||||
template <class _OutputIter>
|
template <class _OutputIter>
|
||||||
_OutputIter
|
_OutputIter
|
||||||
match_results<_BidirectionalIterator, _Allocator>::format(_OutputIter __out,
|
match_results<_BidirectionalIterator, _Allocator>::format(_OutputIter __output,
|
||||||
const char_type* __fmt_first, const char_type* __fmt_last,
|
const char_type* __fmt_first, const char_type* __fmt_last,
|
||||||
regex_constants::match_flag_type __flags) const
|
regex_constants::match_flag_type __flags) const
|
||||||
{
|
{
|
||||||
@ -5391,27 +5391,27 @@ match_results<_BidirectionalIterator, _Allocator>::format(_OutputIter __out,
|
|||||||
for (; __fmt_first != __fmt_last; ++__fmt_first)
|
for (; __fmt_first != __fmt_last; ++__fmt_first)
|
||||||
{
|
{
|
||||||
if (*__fmt_first == '&')
|
if (*__fmt_first == '&')
|
||||||
__out = _VSTD::copy(__matches_[0].first, __matches_[0].second,
|
__output = _VSTD::copy(__matches_[0].first, __matches_[0].second,
|
||||||
__out);
|
__output);
|
||||||
else if (*__fmt_first == '\\' && __fmt_first + 1 != __fmt_last)
|
else if (*__fmt_first == '\\' && __fmt_first + 1 != __fmt_last)
|
||||||
{
|
{
|
||||||
++__fmt_first;
|
++__fmt_first;
|
||||||
if ('0' <= *__fmt_first && *__fmt_first <= '9')
|
if ('0' <= *__fmt_first && *__fmt_first <= '9')
|
||||||
{
|
{
|
||||||
size_t __i = *__fmt_first - '0';
|
size_t __i = *__fmt_first - '0';
|
||||||
__out = _VSTD::copy((*this)[__i].first,
|
__output = _VSTD::copy((*this)[__i].first,
|
||||||
(*this)[__i].second, __out);
|
(*this)[__i].second, __output);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
*__out = *__fmt_first;
|
*__output = *__fmt_first;
|
||||||
++__out;
|
++__output;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
*__out = *__fmt_first;
|
*__output = *__fmt_first;
|
||||||
++__out;
|
++__output;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -5424,21 +5424,21 @@ match_results<_BidirectionalIterator, _Allocator>::format(_OutputIter __out,
|
|||||||
switch (__fmt_first[1])
|
switch (__fmt_first[1])
|
||||||
{
|
{
|
||||||
case '$':
|
case '$':
|
||||||
*__out = *++__fmt_first;
|
*__output = *++__fmt_first;
|
||||||
++__out;
|
++__output;
|
||||||
break;
|
break;
|
||||||
case '&':
|
case '&':
|
||||||
++__fmt_first;
|
++__fmt_first;
|
||||||
__out = _VSTD::copy(__matches_[0].first, __matches_[0].second,
|
__output = _VSTD::copy(__matches_[0].first, __matches_[0].second,
|
||||||
__out);
|
__output);
|
||||||
break;
|
break;
|
||||||
case '`':
|
case '`':
|
||||||
++__fmt_first;
|
++__fmt_first;
|
||||||
__out = _VSTD::copy(__prefix_.first, __prefix_.second, __out);
|
__output = _VSTD::copy(__prefix_.first, __prefix_.second, __output);
|
||||||
break;
|
break;
|
||||||
case '\'':
|
case '\'':
|
||||||
++__fmt_first;
|
++__fmt_first;
|
||||||
__out = _VSTD::copy(__suffix_.first, __suffix_.second, __out);
|
__output = _VSTD::copy(__suffix_.first, __suffix_.second, __output);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if ('0' <= __fmt_first[1] && __fmt_first[1] <= '9')
|
if ('0' <= __fmt_first[1] && __fmt_first[1] <= '9')
|
||||||
@ -5451,25 +5451,25 @@ match_results<_BidirectionalIterator, _Allocator>::format(_OutputIter __out,
|
|||||||
++__fmt_first;
|
++__fmt_first;
|
||||||
__i = 10 * __i + *__fmt_first - '0';
|
__i = 10 * __i + *__fmt_first - '0';
|
||||||
}
|
}
|
||||||
__out = _VSTD::copy((*this)[__i].first,
|
__output = _VSTD::copy((*this)[__i].first,
|
||||||
(*this)[__i].second, __out);
|
(*this)[__i].second, __output);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
*__out = *__fmt_first;
|
*__output = *__fmt_first;
|
||||||
++__out;
|
++__output;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
*__out = *__fmt_first;
|
*__output = *__fmt_first;
|
||||||
++__out;
|
++__output;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return __out;
|
return __output;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class _BidirectionalIterator, class _Allocator>
|
template <class _BidirectionalIterator, class _Allocator>
|
||||||
@ -6459,7 +6459,7 @@ typedef regex_token_iterator<wstring::const_iterator> wsregex_token_iterator;
|
|||||||
template <class _OutputIterator, class _BidirectionalIterator,
|
template <class _OutputIterator, class _BidirectionalIterator,
|
||||||
class _Traits, class _CharT>
|
class _Traits, class _CharT>
|
||||||
_OutputIterator
|
_OutputIterator
|
||||||
regex_replace(_OutputIterator __out,
|
regex_replace(_OutputIterator __output,
|
||||||
_BidirectionalIterator __first, _BidirectionalIterator __last,
|
_BidirectionalIterator __first, _BidirectionalIterator __last,
|
||||||
const basic_regex<_CharT, _Traits>& __e, const _CharT* __fmt,
|
const basic_regex<_CharT, _Traits>& __e, const _CharT* __fmt,
|
||||||
regex_constants::match_flag_type __flags = regex_constants::match_default)
|
regex_constants::match_flag_type __flags = regex_constants::match_default)
|
||||||
@ -6470,7 +6470,7 @@ regex_replace(_OutputIterator __out,
|
|||||||
if (__i == __eof)
|
if (__i == __eof)
|
||||||
{
|
{
|
||||||
if (!(__flags & regex_constants::format_no_copy))
|
if (!(__flags & regex_constants::format_no_copy))
|
||||||
__out = _VSTD::copy(__first, __last, __out);
|
__output = _VSTD::copy(__first, __last, __output);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -6478,29 +6478,29 @@ regex_replace(_OutputIterator __out,
|
|||||||
for (size_t __len = char_traits<_CharT>::length(__fmt); __i != __eof; ++__i)
|
for (size_t __len = char_traits<_CharT>::length(__fmt); __i != __eof; ++__i)
|
||||||
{
|
{
|
||||||
if (!(__flags & regex_constants::format_no_copy))
|
if (!(__flags & regex_constants::format_no_copy))
|
||||||
__out = _VSTD::copy(__i->prefix().first, __i->prefix().second, __out);
|
__output = _VSTD::copy(__i->prefix().first, __i->prefix().second, __output);
|
||||||
__out = __i->format(__out, __fmt, __fmt + __len, __flags);
|
__output = __i->format(__output, __fmt, __fmt + __len, __flags);
|
||||||
__lm = __i->suffix();
|
__lm = __i->suffix();
|
||||||
if (__flags & regex_constants::format_first_only)
|
if (__flags & regex_constants::format_first_only)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (!(__flags & regex_constants::format_no_copy))
|
if (!(__flags & regex_constants::format_no_copy))
|
||||||
__out = _VSTD::copy(__lm.first, __lm.second, __out);
|
__output = _VSTD::copy(__lm.first, __lm.second, __output);
|
||||||
}
|
}
|
||||||
return __out;
|
return __output;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class _OutputIterator, class _BidirectionalIterator,
|
template <class _OutputIterator, class _BidirectionalIterator,
|
||||||
class _Traits, class _CharT, class _ST, class _SA>
|
class _Traits, class _CharT, class _ST, class _SA>
|
||||||
inline _LIBCPP_INLINE_VISIBILITY
|
inline _LIBCPP_INLINE_VISIBILITY
|
||||||
_OutputIterator
|
_OutputIterator
|
||||||
regex_replace(_OutputIterator __out,
|
regex_replace(_OutputIterator __output,
|
||||||
_BidirectionalIterator __first, _BidirectionalIterator __last,
|
_BidirectionalIterator __first, _BidirectionalIterator __last,
|
||||||
const basic_regex<_CharT, _Traits>& __e,
|
const basic_regex<_CharT, _Traits>& __e,
|
||||||
const basic_string<_CharT, _ST, _SA>& __fmt,
|
const basic_string<_CharT, _ST, _SA>& __fmt,
|
||||||
regex_constants::match_flag_type __flags = regex_constants::match_default)
|
regex_constants::match_flag_type __flags = regex_constants::match_default)
|
||||||
{
|
{
|
||||||
return _VSTD::regex_replace(__out, __first, __last, __e, __fmt.c_str(), __flags);
|
return _VSTD::regex_replace(__output, __first, __last, __e, __fmt.c_str(), __flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class _Traits, class _CharT, class _ST, class _SA, class _FST,
|
template <class _Traits, class _CharT, class _ST, class _SA, class _FST,
|
||||||
|
@ -156,6 +156,11 @@ namespace std {
|
|||||||
template <> struct hash<u32string_view>;
|
template <> struct hash<u32string_view>;
|
||||||
template <> struct hash<wstring_view>;
|
template <> struct hash<wstring_view>;
|
||||||
|
|
||||||
|
constexpr basic_string<char> operator "" s( const char *str, size_t len ); // C++17
|
||||||
|
constexpr basic_string<wchar_t> operator "" s( const wchar_t *str, size_t len ); // C++17
|
||||||
|
constexpr basic_string<char16_t> operator "" s( const char16_t *str, size_t len ); // C++17
|
||||||
|
constexpr basic_string<char32_t> operator "" s( const char32_t *str, size_t len ); // C++17
|
||||||
|
|
||||||
} // namespace std
|
} // namespace std
|
||||||
|
|
||||||
|
|
||||||
@ -749,6 +754,38 @@ hash<basic_string_view<_CharT, _Traits> >::operator()(
|
|||||||
return __do_string_hash(__val.data(), __val.data() + __val.size());
|
return __do_string_hash(__val.data(), __val.data() + __val.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if _LIBCPP_STD_VER > 11
|
||||||
|
inline namespace literals
|
||||||
|
{
|
||||||
|
inline namespace string_view_literals
|
||||||
|
{
|
||||||
|
inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR
|
||||||
|
basic_string_view<char> operator "" sv(const char *__str, size_t __len)
|
||||||
|
{
|
||||||
|
return basic_string_view<char> (__str, __len);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR
|
||||||
|
basic_string_view<wchar_t> operator "" sv(const wchar_t *__str, size_t __len)
|
||||||
|
{
|
||||||
|
return basic_string_view<wchar_t> (__str, __len);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR
|
||||||
|
basic_string_view<char16_t> operator "" sv(const char16_t *__str, size_t __len)
|
||||||
|
{
|
||||||
|
return basic_string_view<char16_t> (__str, __len);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR
|
||||||
|
basic_string_view<char32_t> operator "" sv(const char32_t *__str, size_t __len)
|
||||||
|
{
|
||||||
|
return basic_string_view<char32_t> (__str, __len);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
_LIBCPP_END_NAMESPACE_STD
|
_LIBCPP_END_NAMESPACE_STD
|
||||||
|
|
||||||
#endif // _LIBCPP_STRING_VIEW
|
#endif // _LIBCPP_STRING_VIEW
|
||||||
|
@ -148,7 +148,8 @@ class __thread_specific_ptr
|
|||||||
__thread_specific_ptr(const __thread_specific_ptr&);
|
__thread_specific_ptr(const __thread_specific_ptr&);
|
||||||
__thread_specific_ptr& operator=(const __thread_specific_ptr&);
|
__thread_specific_ptr& operator=(const __thread_specific_ptr&);
|
||||||
|
|
||||||
static void __at_thread_exit(void*);
|
static void _LIBCPP_TLS_DESTRUCTOR_CC __at_thread_exit(void*);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
typedef _Tp* pointer;
|
typedef _Tp* pointer;
|
||||||
|
|
||||||
@ -164,7 +165,7 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <class _Tp>
|
template <class _Tp>
|
||||||
void
|
void _LIBCPP_TLS_DESTRUCTOR_CC
|
||||||
__thread_specific_ptr<_Tp>::__at_thread_exit(void* __p)
|
__thread_specific_ptr<_Tp>::__at_thread_exit(void* __p)
|
||||||
{
|
{
|
||||||
delete static_cast<pointer>(__p);
|
delete static_cast<pointer>(__p);
|
||||||
@ -173,12 +174,10 @@ __thread_specific_ptr<_Tp>::__at_thread_exit(void* __p)
|
|||||||
template <class _Tp>
|
template <class _Tp>
|
||||||
__thread_specific_ptr<_Tp>::__thread_specific_ptr()
|
__thread_specific_ptr<_Tp>::__thread_specific_ptr()
|
||||||
{
|
{
|
||||||
int __ec = __libcpp_tls_create(
|
int __ec =
|
||||||
&__key_,
|
__libcpp_tls_create(&__key_, &__thread_specific_ptr::__at_thread_exit);
|
||||||
&__thread_specific_ptr::__at_thread_exit);
|
if (__ec)
|
||||||
if (__ec)
|
__throw_system_error(__ec, "__thread_specific_ptr construction failed");
|
||||||
__throw_system_error(__ec,
|
|
||||||
"__thread_specific_ptr construction failed");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class _Tp>
|
template <class _Tp>
|
||||||
|
@ -489,7 +489,7 @@ addressof(__unsafe_unretained _Tp& __x) _NOEXCEPT
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined(_LIBCPP_HAS_NO_RVALUE_REFERENCES) && !defined(_LIBCPP_HAS_NO_DELETED_FUNCTIONS)
|
#if !defined(_LIBCPP_CXX03_LANG)
|
||||||
template <class _Tp> _Tp* addressof(const _Tp&&) noexcept = delete;
|
template <class _Tp> _Tp* addressof(const _Tp&&) noexcept = delete;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -1503,7 +1503,7 @@ template <class _Tp> _LIBCPP_CONSTEXPR bool is_empty_v
|
|||||||
|
|
||||||
// is_polymorphic
|
// is_polymorphic
|
||||||
|
|
||||||
#if __has_feature(is_polymorphic) || defined(_LIBCPP_MSVC)
|
#if __has_feature(is_polymorphic) || defined(_LIBCPP_COMPILER_MSVC)
|
||||||
|
|
||||||
template <class _Tp>
|
template <class _Tp>
|
||||||
struct _LIBCPP_TEMPLATE_VIS is_polymorphic
|
struct _LIBCPP_TEMPLATE_VIS is_polymorphic
|
||||||
@ -1566,7 +1566,7 @@ struct __type_list
|
|||||||
|
|
||||||
struct __nat
|
struct __nat
|
||||||
{
|
{
|
||||||
#ifndef _LIBCPP_HAS_NO_DELETED_FUNCTIONS
|
#ifndef _LIBCPP_CXX03_LANG
|
||||||
__nat() = delete;
|
__nat() = delete;
|
||||||
__nat(const __nat&) = delete;
|
__nat(const __nat&) = delete;
|
||||||
__nat& operator=(const __nat&) = delete;
|
__nat& operator=(const __nat&) = delete;
|
||||||
|
@ -348,7 +348,6 @@ template <class T> unspecified2 end(const valarray<T>& v);
|
|||||||
#include <new>
|
#include <new>
|
||||||
|
|
||||||
#include <__undef_min_max>
|
#include <__undef_min_max>
|
||||||
#include <__undef___deallocate>
|
|
||||||
|
|
||||||
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
|
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
|
||||||
#pragma GCC system_header
|
#pragma GCC system_header
|
||||||
@ -3697,7 +3696,7 @@ valarray<_Tp>::resize(size_t __n, value_type __x)
|
|||||||
{
|
{
|
||||||
while (__end_ != __begin_)
|
while (__end_ != __begin_)
|
||||||
(--__end_)->~value_type();
|
(--__end_)->~value_type();
|
||||||
_VSTD::__deallocate(__begin_);
|
_VSTD::__libcpp_deallocate(__begin_);
|
||||||
__begin_ = __end_ = nullptr;
|
__begin_ = __end_ = nullptr;
|
||||||
}
|
}
|
||||||
if (__n)
|
if (__n)
|
||||||
|
@ -12,6 +12,28 @@
|
|||||||
#include "system_error" // __throw_system_error
|
#include "system_error" // __throw_system_error
|
||||||
#include <time.h> // clock_gettime, CLOCK_MONOTONIC and CLOCK_REALTIME
|
#include <time.h> // clock_gettime, CLOCK_MONOTONIC and CLOCK_REALTIME
|
||||||
|
|
||||||
|
#if (__APPLE__)
|
||||||
|
#if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__)
|
||||||
|
#if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 101200
|
||||||
|
#define _LIBCXX_USE_CLOCK_GETTIME
|
||||||
|
#endif
|
||||||
|
#elif defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__)
|
||||||
|
#if __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ >= 100000
|
||||||
|
#define _LIBCXX_USE_CLOCK_GETTIME
|
||||||
|
#endif
|
||||||
|
#elif defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__)
|
||||||
|
#if __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ >= 100000
|
||||||
|
#define _LIBCXX_USE_CLOCK_GETTIME
|
||||||
|
#endif
|
||||||
|
#elif defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__)
|
||||||
|
#if __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ >= 30000
|
||||||
|
#define _LIBCXX_USE_CLOCK_GETTIME
|
||||||
|
#endif
|
||||||
|
#endif // __ENVIRONMENT_.*_VERSION_MIN_REQUIRED__
|
||||||
|
#else
|
||||||
|
#define _LIBCXX_USE_CLOCK_GETTIME
|
||||||
|
#endif // __APPLE__
|
||||||
|
|
||||||
#if defined(_LIBCPP_WIN32API)
|
#if defined(_LIBCPP_WIN32API)
|
||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
#define VC_EXTRA_LEAN
|
#define VC_EXTRA_LEAN
|
||||||
@ -70,16 +92,16 @@ system_clock::now() _NOEXCEPT
|
|||||||
static_cast<__int64>(ft.dwLowDateTime)};
|
static_cast<__int64>(ft.dwLowDateTime)};
|
||||||
return time_point(duration_cast<duration>(d - nt_to_unix_epoch));
|
return time_point(duration_cast<duration>(d - nt_to_unix_epoch));
|
||||||
#else
|
#else
|
||||||
#ifdef CLOCK_REALTIME
|
#if defined(_LIBCXX_USE_CLOCK_GETTIME) && defined(CLOCK_REALTIME)
|
||||||
struct timespec tp;
|
struct timespec tp;
|
||||||
if (0 != clock_gettime(CLOCK_REALTIME, &tp))
|
if (0 != clock_gettime(CLOCK_REALTIME, &tp))
|
||||||
__throw_system_error(errno, "clock_gettime(CLOCK_REALTIME) failed");
|
__throw_system_error(errno, "clock_gettime(CLOCK_REALTIME) failed");
|
||||||
return time_point(seconds(tp.tv_sec) + microseconds(tp.tv_nsec / 1000));
|
return time_point(seconds(tp.tv_sec) + microseconds(tp.tv_nsec / 1000));
|
||||||
#else // !CLOCK_REALTIME
|
#else
|
||||||
timeval tv;
|
timeval tv;
|
||||||
gettimeofday(&tv, 0);
|
gettimeofday(&tv, 0);
|
||||||
return time_point(seconds(tv.tv_sec) + microseconds(tv.tv_usec));
|
return time_point(seconds(tv.tv_sec) + microseconds(tv.tv_usec));
|
||||||
#endif // CLOCK_REALTIME
|
#endif // _LIBCXX_USE_CLOCK_GETTIME && CLOCK_REALTIME
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -106,6 +128,18 @@ const bool steady_clock::is_steady;
|
|||||||
|
|
||||||
#if defined(__APPLE__)
|
#if defined(__APPLE__)
|
||||||
|
|
||||||
|
// Darwin libc versions >= 1133 provide ns precision via CLOCK_UPTIME_RAW
|
||||||
|
#if defined(_LIBCXX_USE_CLOCK_GETTIME) && defined(CLOCK_UPTIME_RAW)
|
||||||
|
steady_clock::time_point
|
||||||
|
steady_clock::now() _NOEXCEPT
|
||||||
|
{
|
||||||
|
struct timespec tp;
|
||||||
|
if (0 != clock_gettime(CLOCK_UPTIME_RAW, &tp))
|
||||||
|
__throw_system_error(errno, "clock_gettime(CLOCK_UPTIME_RAW) failed");
|
||||||
|
return time_point(seconds(tp.tv_sec) + nanoseconds(tp.tv_nsec));
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
// mach_absolute_time() * MachInfo.numer / MachInfo.denom is the number of
|
// mach_absolute_time() * MachInfo.numer / MachInfo.denom is the number of
|
||||||
// nanoseconds since the computer booted up. MachInfo.numer and MachInfo.denom
|
// nanoseconds since the computer booted up. MachInfo.numer and MachInfo.denom
|
||||||
// are run time constants supplied by the OS. This clock has no relationship
|
// are run time constants supplied by the OS. This clock has no relationship
|
||||||
@ -157,6 +191,7 @@ steady_clock::now() _NOEXCEPT
|
|||||||
static FP fp = init_steady_clock();
|
static FP fp = init_steady_clock();
|
||||||
return time_point(duration(fp()));
|
return time_point(duration(fp()));
|
||||||
}
|
}
|
||||||
|
#endif // defined(_LIBCXX_USE_CLOCK_GETTIME) && defined(CLOCK_UPTIME_RAW)
|
||||||
|
|
||||||
#elif defined(_LIBCPP_WIN32API)
|
#elif defined(_LIBCPP_WIN32API)
|
||||||
|
|
||||||
@ -175,6 +210,13 @@ steady_clock::now() _NOEXCEPT
|
|||||||
|
|
||||||
#elif defined(CLOCK_MONOTONIC)
|
#elif defined(CLOCK_MONOTONIC)
|
||||||
|
|
||||||
|
// On Apple platforms only CLOCK_UPTIME_RAW or mach_absolute_time are able to
|
||||||
|
// time functions in the nanosecond range. Thus, they are the only acceptable
|
||||||
|
// implementations of steady_clock.
|
||||||
|
#ifdef __APPLE__
|
||||||
|
#error "Never use CLOCK_MONOTONIC for steady_clock::now on Apple platforms"
|
||||||
|
#endif
|
||||||
|
|
||||||
steady_clock::time_point
|
steady_clock::time_point
|
||||||
steady_clock::now() _NOEXCEPT
|
steady_clock::now() _NOEXCEPT
|
||||||
{
|
{
|
||||||
|
@ -12,7 +12,10 @@
|
|||||||
#include "exception"
|
#include "exception"
|
||||||
#include "new"
|
#include "new"
|
||||||
|
|
||||||
#if defined(__APPLE__) && !defined(LIBCXXRT) && \
|
#if defined(_LIBCPP_ABI_MICROSOFT)
|
||||||
|
#include <eh.h>
|
||||||
|
#include <corecrt_terminate.h>
|
||||||
|
#elif defined(__APPLE__) && !defined(LIBCXXRT) && \
|
||||||
!defined(_LIBCPP_BUILDING_HAS_NO_ABI_LIBRARY)
|
!defined(_LIBCPP_BUILDING_HAS_NO_ABI_LIBRARY)
|
||||||
#include <cxxabi.h>
|
#include <cxxabi.h>
|
||||||
|
|
||||||
@ -46,13 +49,21 @@ namespace std
|
|||||||
unexpected_handler
|
unexpected_handler
|
||||||
set_unexpected(unexpected_handler func) _NOEXCEPT
|
set_unexpected(unexpected_handler func) _NOEXCEPT
|
||||||
{
|
{
|
||||||
return __sync_lock_test_and_set(&__unexpected_handler, func);
|
#if defined(_LIBCPP_ABI_MICROSOFT)
|
||||||
|
return ::set_unexpected(func);
|
||||||
|
#else
|
||||||
|
return __sync_lock_test_and_set(&__unexpected_handler, func);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
unexpected_handler
|
unexpected_handler
|
||||||
get_unexpected() _NOEXCEPT
|
get_unexpected() _NOEXCEPT
|
||||||
{
|
{
|
||||||
return __sync_fetch_and_add(&__unexpected_handler, (unexpected_handler)0);
|
#if defined(_LIBCPP_ABI_MICROSOFT)
|
||||||
|
return ::_get_unexpected();
|
||||||
|
#else
|
||||||
|
return __sync_fetch_and_add(&__unexpected_handler, (unexpected_handler)0);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
_LIBCPP_NORETURN
|
_LIBCPP_NORETURN
|
||||||
@ -67,13 +78,21 @@ unexpected()
|
|||||||
terminate_handler
|
terminate_handler
|
||||||
set_terminate(terminate_handler func) _NOEXCEPT
|
set_terminate(terminate_handler func) _NOEXCEPT
|
||||||
{
|
{
|
||||||
return __sync_lock_test_and_set(&__terminate_handler, func);
|
#if defined(_LIBCPP_ABI_MICROSOFT)
|
||||||
|
return ::set_terminate(func);
|
||||||
|
#else
|
||||||
|
return __sync_lock_test_and_set(&__terminate_handler, func);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
terminate_handler
|
terminate_handler
|
||||||
get_terminate() _NOEXCEPT
|
get_terminate() _NOEXCEPT
|
||||||
{
|
{
|
||||||
return __sync_fetch_and_add(&__terminate_handler, (terminate_handler)0);
|
#if defined(_LIBCPP_ABI_MICROSOFT)
|
||||||
|
return ::_get_terminate();
|
||||||
|
#else
|
||||||
|
return __sync_fetch_and_add(&__terminate_handler, (terminate_handler)0);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef __EMSCRIPTEN__ // We provide this in JS
|
#ifndef __EMSCRIPTEN__ // We provide this in JS
|
||||||
@ -103,6 +122,7 @@ terminate() _NOEXCEPT
|
|||||||
#endif // !defined(LIBCXXRT) && !defined(_LIBCPPABI_VERSION)
|
#endif // !defined(LIBCXXRT) && !defined(_LIBCPPABI_VERSION)
|
||||||
|
|
||||||
#if !defined(LIBCXXRT) && !defined(__GLIBCXX__) && !defined(__EMSCRIPTEN__)
|
#if !defined(LIBCXXRT) && !defined(__GLIBCXX__) && !defined(__EMSCRIPTEN__)
|
||||||
|
|
||||||
bool uncaught_exception() _NOEXCEPT { return uncaught_exceptions() > 0; }
|
bool uncaught_exception() _NOEXCEPT { return uncaught_exceptions() > 0; }
|
||||||
|
|
||||||
int uncaught_exceptions() _NOEXCEPT
|
int uncaught_exceptions() _NOEXCEPT
|
||||||
@ -115,7 +135,9 @@ int uncaught_exceptions() _NOEXCEPT
|
|||||||
# else
|
# else
|
||||||
return __cxa_uncaught_exception() ? 1 : 0;
|
return __cxa_uncaught_exception() ? 1 : 0;
|
||||||
# endif
|
# endif
|
||||||
#else // __APPLE__
|
#elif defined(_LIBCPP_ABI_MICROSOFT)
|
||||||
|
return __uncaught_exceptions();
|
||||||
|
#else
|
||||||
# if defined(_MSC_VER) && ! defined(__clang__)
|
# if defined(_MSC_VER) && ! defined(__clang__)
|
||||||
_LIBCPP_WARNING("uncaught_exceptions not yet implemented")
|
_LIBCPP_WARNING("uncaught_exceptions not yet implemented")
|
||||||
# else
|
# else
|
||||||
|
@ -34,7 +34,7 @@ class _LIBCPP_TYPE_VIS __new_delete_memory_resource_imp
|
|||||||
{ return __allocate(__size); }
|
{ return __allocate(__size); }
|
||||||
|
|
||||||
virtual void do_deallocate(void * __p, size_t, size_t)
|
virtual void do_deallocate(void * __p, size_t, size_t)
|
||||||
{ __deallocate(__p); }
|
{ _VSTD::__libcpp_deallocate(__p); }
|
||||||
|
|
||||||
virtual bool do_is_equal(memory_resource const & __other) const _NOEXCEPT
|
virtual bool do_is_equal(memory_resource const & __other) const _NOEXCEPT
|
||||||
{ return &__other == this; }
|
{ return &__other == this; }
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
#elif defined(__sun__)
|
#elif defined(__sun__)
|
||||||
#define _LIBCPP_ELAST ESTALE
|
#define _LIBCPP_ELAST ESTALE
|
||||||
#elif defined(_LIBCPP_MSVCRT)
|
#elif defined(_LIBCPP_MSVCRT)
|
||||||
#define _LIBCPP_ELAST _sys_nerr
|
#define _LIBCPP_ELAST (_sys_nerr - 1)
|
||||||
#else
|
#else
|
||||||
// Warn here so that the person doing the libcxx port has an easier time:
|
// Warn here so that the person doing the libcxx port has an easier time:
|
||||||
#warning ELAST for this platform not yet implemented
|
#warning ELAST for this platform not yet implemented
|
||||||
|
@ -14,32 +14,64 @@
|
|||||||
_LIBCPP_BEGIN_NAMESPACE_STD
|
_LIBCPP_BEGIN_NAMESPACE_STD
|
||||||
|
|
||||||
#ifndef _LIBCPP_HAS_NO_STDIN
|
#ifndef _LIBCPP_HAS_NO_STDIN
|
||||||
_ALIGNAS_TYPE (istream) _LIBCPP_FUNC_VIS char cin [sizeof(istream)];
|
_ALIGNAS_TYPE (istream) _LIBCPP_FUNC_VIS char cin[sizeof(istream)]
|
||||||
_ALIGNAS_TYPE (__stdinbuf<char> ) static char __cin [sizeof(__stdinbuf <char>)];
|
#if defined(_MSC_VER) && defined(__clang__)
|
||||||
|
__asm__("?cin@__1@std@@3V?$basic_istream@DU?$char_traits@D@__1@std@@@12@A")
|
||||||
|
#endif
|
||||||
|
;
|
||||||
|
_ALIGNAS_TYPE (__stdinbuf<char> ) static char __cin[sizeof(__stdinbuf <char>)];
|
||||||
static mbstate_t mb_cin;
|
static mbstate_t mb_cin;
|
||||||
_ALIGNAS_TYPE (wistream) _LIBCPP_FUNC_VIS char wcin [sizeof(wistream)];
|
_ALIGNAS_TYPE (wistream) _LIBCPP_FUNC_VIS char wcin[sizeof(wistream)]
|
||||||
_ALIGNAS_TYPE (__stdinbuf<wchar_t> ) static char __wcin [sizeof(__stdinbuf <wchar_t>)];
|
#if defined(_MSC_VER) && defined(__clang__)
|
||||||
|
__asm__("?wcin@__1@std@@3V?$basic_istream@_WU?$char_traits@_W@__1@std@@@12@A")
|
||||||
|
#endif
|
||||||
|
;
|
||||||
|
_ALIGNAS_TYPE (__stdinbuf<wchar_t> ) static char __wcin[sizeof(__stdinbuf <wchar_t>)];
|
||||||
static mbstate_t mb_wcin;
|
static mbstate_t mb_wcin;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef _LIBCPP_HAS_NO_STDOUT
|
#ifndef _LIBCPP_HAS_NO_STDOUT
|
||||||
_ALIGNAS_TYPE (ostream) _LIBCPP_FUNC_VIS char cout[sizeof(ostream)];
|
_ALIGNAS_TYPE (ostream) _LIBCPP_FUNC_VIS char cout[sizeof(ostream)]
|
||||||
|
#if defined(_MSC_VER) && defined(__clang__)
|
||||||
|
__asm__("?cout@__1@std@@3V?$basic_ostream@DU?$char_traits@D@__1@std@@@12@A")
|
||||||
|
#endif
|
||||||
|
;
|
||||||
_ALIGNAS_TYPE (__stdoutbuf<char>) static char __cout[sizeof(__stdoutbuf<char>)];
|
_ALIGNAS_TYPE (__stdoutbuf<char>) static char __cout[sizeof(__stdoutbuf<char>)];
|
||||||
static mbstate_t mb_cout;
|
static mbstate_t mb_cout;
|
||||||
_ALIGNAS_TYPE (wostream) _LIBCPP_FUNC_VIS char wcout[sizeof(wostream)];
|
_ALIGNAS_TYPE (wostream) _LIBCPP_FUNC_VIS char wcout[sizeof(wostream)]
|
||||||
|
#if defined(_MSC_VER) && defined(__clang__)
|
||||||
|
__asm__("?wcout@__1@std@@3V?$basic_ostream@_WU?$char_traits@_W@__1@std@@@12@A")
|
||||||
|
#endif
|
||||||
|
;
|
||||||
_ALIGNAS_TYPE (__stdoutbuf<wchar_t>) static char __wcout[sizeof(__stdoutbuf<wchar_t>)];
|
_ALIGNAS_TYPE (__stdoutbuf<wchar_t>) static char __wcout[sizeof(__stdoutbuf<wchar_t>)];
|
||||||
static mbstate_t mb_wcout;
|
static mbstate_t mb_wcout;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
_ALIGNAS_TYPE (ostream) _LIBCPP_FUNC_VIS char cerr[sizeof(ostream)];
|
_ALIGNAS_TYPE (ostream) _LIBCPP_FUNC_VIS char cerr[sizeof(ostream)]
|
||||||
|
#if defined(_MSC_VER) && defined(__clang__)
|
||||||
|
__asm__("?cerr@__1@std@@3V?$basic_ostream@DU?$char_traits@D@__1@std@@@12@A")
|
||||||
|
#endif
|
||||||
|
;
|
||||||
_ALIGNAS_TYPE (__stdoutbuf<char>) static char __cerr[sizeof(__stdoutbuf<char>)];
|
_ALIGNAS_TYPE (__stdoutbuf<char>) static char __cerr[sizeof(__stdoutbuf<char>)];
|
||||||
static mbstate_t mb_cerr;
|
static mbstate_t mb_cerr;
|
||||||
_ALIGNAS_TYPE (wostream) _LIBCPP_FUNC_VIS char wcerr[sizeof(wostream)];
|
_ALIGNAS_TYPE (wostream) _LIBCPP_FUNC_VIS char wcerr[sizeof(wostream)]
|
||||||
|
#if defined(_MSC_VER) && defined(__clang__)
|
||||||
|
__asm__("?wcerr@__1@std@@3V?$basic_ostream@_WU?$char_traits@_W@__1@std@@@12@A")
|
||||||
|
#endif
|
||||||
|
;
|
||||||
_ALIGNAS_TYPE (__stdoutbuf<wchar_t>) static char __wcerr[sizeof(__stdoutbuf<wchar_t>)];
|
_ALIGNAS_TYPE (__stdoutbuf<wchar_t>) static char __wcerr[sizeof(__stdoutbuf<wchar_t>)];
|
||||||
static mbstate_t mb_wcerr;
|
static mbstate_t mb_wcerr;
|
||||||
|
|
||||||
_ALIGNAS_TYPE (ostream) _LIBCPP_FUNC_VIS char clog[sizeof(ostream)];
|
_ALIGNAS_TYPE (ostream) _LIBCPP_FUNC_VIS char clog[sizeof(ostream)]
|
||||||
_ALIGNAS_TYPE (wostream) _LIBCPP_FUNC_VIS char wclog[sizeof(wostream)];
|
#if defined(_MSC_VER) && defined(__clang__)
|
||||||
|
__asm__("?clog@__1@std@@3V?$basic_ostream@DU?$char_traits@D@__1@std@@@12@A")
|
||||||
|
#endif
|
||||||
|
;
|
||||||
|
_ALIGNAS_TYPE (wostream) _LIBCPP_FUNC_VIS char wclog[sizeof(wostream)]
|
||||||
|
#if defined(_MSC_VER) && defined(__clang__)
|
||||||
|
__asm__("?wclog@__1@std@@3V?$basic_ostream@_WU?$char_traits@_W@__1@std@@@12@A")
|
||||||
|
#endif
|
||||||
|
;
|
||||||
|
|
||||||
ios_base::Init __start_std_streams;
|
ios_base::Init __start_std_streams;
|
||||||
|
|
||||||
|
@ -140,7 +140,7 @@ class _LIBCPP_HIDDEN locale::__imp
|
|||||||
: public facet
|
: public facet
|
||||||
{
|
{
|
||||||
enum {N = 28};
|
enum {N = 28};
|
||||||
#if defined(_LIBCPP_MSVC)
|
#if defined(_LIBCPP_COMPILER_MSVC)
|
||||||
// FIXME: MSVC doesn't support aligned parameters by value.
|
// FIXME: MSVC doesn't support aligned parameters by value.
|
||||||
// I can't get the __sso_allocator to work here
|
// I can't get the __sso_allocator to work here
|
||||||
// for MSVC I think for this reason.
|
// for MSVC I think for this reason.
|
||||||
|
@ -117,6 +117,12 @@ sleep_for(const chrono::nanoseconds& ns)
|
|||||||
using namespace chrono;
|
using namespace chrono;
|
||||||
if (ns > nanoseconds::zero())
|
if (ns > nanoseconds::zero())
|
||||||
{
|
{
|
||||||
|
#if defined(_LIBCPP_WIN32API)
|
||||||
|
milliseconds ms = duration_cast<milliseconds>(ns);
|
||||||
|
if (ms.count() == 0 || ns > duration_cast<nanoseconds>(ms))
|
||||||
|
++ms;
|
||||||
|
Sleep(ms.count());
|
||||||
|
#else
|
||||||
seconds s = duration_cast<seconds>(ns);
|
seconds s = duration_cast<seconds>(ns);
|
||||||
timespec ts;
|
timespec ts;
|
||||||
typedef decltype(ts.tv_sec) ts_sec;
|
typedef decltype(ts.tv_sec) ts_sec;
|
||||||
@ -134,6 +140,7 @@ sleep_for(const chrono::nanoseconds& ns)
|
|||||||
|
|
||||||
while (nanosleep(&ts, &ts) == -1 && errno == EINTR)
|
while (nanosleep(&ts, &ts) == -1 && errno == EINTR)
|
||||||
;
|
;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -92,7 +92,6 @@ STD_HEADERS= __bit_reference\
|
|||||||
__threading_support\
|
__threading_support\
|
||||||
__tree\
|
__tree\
|
||||||
__tuple\
|
__tuple\
|
||||||
__undef___deallocate\
|
|
||||||
__undef_min_max\
|
__undef_min_max\
|
||||||
algorithm\
|
algorithm\
|
||||||
any\
|
any\
|
||||||
|
@ -4464,7 +4464,6 @@ OLD_FILES+=usr/include/c++/v1/__string
|
|||||||
OLD_FILES+=usr/include/c++/v1/__threading_support
|
OLD_FILES+=usr/include/c++/v1/__threading_support
|
||||||
OLD_FILES+=usr/include/c++/v1/__tree
|
OLD_FILES+=usr/include/c++/v1/__tree
|
||||||
OLD_FILES+=usr/include/c++/v1/__tuple
|
OLD_FILES+=usr/include/c++/v1/__tuple
|
||||||
OLD_FILES+=usr/include/c++/v1/__undef___deallocate
|
|
||||||
OLD_FILES+=usr/include/c++/v1/__undef_min_max
|
OLD_FILES+=usr/include/c++/v1/__undef_min_max
|
||||||
OLD_FILES+=usr/include/c++/v1/algorithm
|
OLD_FILES+=usr/include/c++/v1/algorithm
|
||||||
OLD_FILES+=usr/include/c++/v1/any
|
OLD_FILES+=usr/include/c++/v1/any
|
||||||
@ -4608,7 +4607,6 @@ OLD_FILES+=usr/include/c++/v1/tr1/__string
|
|||||||
OLD_FILES+=usr/include/c++/v1/tr1/__threading_support
|
OLD_FILES+=usr/include/c++/v1/tr1/__threading_support
|
||||||
OLD_FILES+=usr/include/c++/v1/tr1/__tree
|
OLD_FILES+=usr/include/c++/v1/tr1/__tree
|
||||||
OLD_FILES+=usr/include/c++/v1/tr1/__tuple
|
OLD_FILES+=usr/include/c++/v1/tr1/__tuple
|
||||||
OLD_FILES+=usr/include/c++/v1/tr1/__undef___deallocate
|
|
||||||
OLD_FILES+=usr/include/c++/v1/tr1/__undef_min_max
|
OLD_FILES+=usr/include/c++/v1/tr1/__undef_min_max
|
||||||
OLD_FILES+=usr/include/c++/v1/tr1/algorithm
|
OLD_FILES+=usr/include/c++/v1/tr1/algorithm
|
||||||
OLD_FILES+=usr/include/c++/v1/tr1/any
|
OLD_FILES+=usr/include/c++/v1/tr1/any
|
||||||
|
Loading…
Reference in New Issue
Block a user