Skip to content

Commit 1aa7846

Browse files
committed
EASTL version 3.20.02.
1 parent 3cf1c4f commit 1aa7846

File tree

13 files changed

+350
-229
lines changed

13 files changed

+350
-229
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,4 @@ Testing/*
4747
/buckaroo/
4848
.buckconfig.local
4949
BUCKAROO_DEPS
50+
.vscode/settings.json

doc/EASTL.natvis

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -392,9 +392,9 @@
392392
<Synthetic Name="NOTE!">
393393
<DisplayString>It is possible to expand parents that do not exist.</DisplayString>
394394
</Synthetic>
395-
<Item Name="Parent">*(eastl::rbtree_node&lt;$T2&gt;*)(mpNodeParent.value &amp; (~uintptr_t(1)))</Item>
396-
<Item Name="Left">*(eastl::rbtree_node&lt;$T2&gt;*)mpNodeLeft</Item>
397-
<Item Name="Right">*(eastl::rbtree_node&lt;$T2&gt;*)mpNodeRight</Item>
395+
<Item Name="Parent">*(eastl::rbtree_node&lt;$T1&gt;*)mpNodeParent</Item>
396+
<Item Name="Left">*(eastl::rbtree_node&lt;$T1&gt;*)mpNodeLeft</Item>
397+
<Item Name="Right">*(eastl::rbtree_node&lt;$T1&gt;*)mpNodeRight</Item>
398398
</Expand>
399399
</Type>
400400

include/EASTL/algorithm.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4309,9 +4309,8 @@ namespace eastl
43094309
template <class T, class Compare>
43104310
EA_CONSTEXPR const T& clamp(const T& v, const T& lo, const T& hi, Compare comp)
43114311
{
4312-
// code collapsed to a single line due to constexpr requirements
4313-
return [&] { EASTL_ASSERT(!comp(hi, lo)); }(),
4314-
comp(v, lo) ? lo : comp(hi, v) ? hi : v;
4312+
EASTL_ASSERT(!comp(hi, lo));
4313+
return comp(v, lo) ? lo : comp(hi, v) ? hi : v;
43154314
}
43164315

43174316
template <class T>

include/EASTL/internal/config.h

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,8 @@
8989
///////////////////////////////////////////////////////////////////////////////
9090

9191
#ifndef EASTL_VERSION
92-
#define EASTL_VERSION "3.19.05"
93-
#define EASTL_VERSION_N 31905
92+
#define EASTL_VERSION "3.20.02"
93+
#define EASTL_VERSION_N 32002
9494
#endif
9595

9696

@@ -1855,17 +1855,48 @@ typedef EASTL_SSIZE_T eastl_ssize_t; // Signed version of eastl_size_t. Concept
18551855

18561856
/// EASTL_HAS_UNIQUE_OBJECT_REPRESENTATIONS_AVAILABLE
18571857
#if defined(__clang__)
1858+
// NB: !__is_identifier() is correct: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66970#c11
18581859
#if !__is_identifier(__has_unique_object_representations)
18591860
#define EASTL_HAS_UNIQUE_OBJECT_REPRESENTATIONS_AVAILABLE 1
18601861
#else
18611862
#define EASTL_HAS_UNIQUE_OBJECT_REPRESENTATIONS_AVAILABLE 0
18621863
#endif
1863-
#elif defined(_MSC_VER) && (_MSC_VER >= 1913) // VS2017+
1864+
#elif defined(_MSC_VER) && (_MSC_VER >= 1913) // VS2017 15.6+
18641865
#define EASTL_HAS_UNIQUE_OBJECT_REPRESENTATIONS_AVAILABLE 1
18651866
#else
18661867
#define EASTL_HAS_UNIQUE_OBJECT_REPRESENTATIONS_AVAILABLE 0
18671868
#endif
18681869

1870+
#if defined(__clang__)
1871+
// NB: !__is_identifier() is correct: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66970#c11
1872+
#if !__is_identifier(__is_final)
1873+
#define EASTL_IS_FINAL_AVAILABLE 1
1874+
#else
1875+
#define EASTL_IS_FINAL_AVAILABLE 0
1876+
#endif
1877+
#elif defined(_MSC_VER) && (_MSC_VER >= 1914) // VS2017 15.7+
1878+
#define EASTL_IS_FINAL_AVAILABLE 1
1879+
#elif defined(EA_COMPILER_GNUC)
1880+
#define EASTL_IS_FINAL_AVAILABLE 1
1881+
#else
1882+
#define EASTL_IS_FINAL_AVAILABLE 0
1883+
#endif
1884+
1885+
#if defined(__clang__)
1886+
// NB: !__is_identifier() is correct: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66970#c11
1887+
#if !__is_identifier(__is_aggregate)
1888+
#define EASTL_IS_AGGREGATE_AVAILABLE 1
1889+
#else
1890+
#define EASTL_IS_AGGREGATE_AVAILABLE 0
1891+
#endif
1892+
#elif defined(_MSC_VER) && (_MSC_VER >= 1915) // VS2017 15.8+
1893+
#define EASTL_IS_AGGREGATE_AVAILABLE 1
1894+
#elif defined(EA_COMPILER_GNUC)
1895+
#define EASTL_IS_AGGREGATE_AVAILABLE 1
1896+
#else
1897+
#define EASTL_IS_AGGREGATE_AVAILABLE 0
1898+
#endif
1899+
18691900

18701901
/// EASTL_ENABLE_PAIR_FIRST_ELEMENT_CONSTRUCTOR
18711902
/// This feature define allows users to toggle the problematic eastl::pair implicit

include/EASTL/internal/fixed_pool.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1363,9 +1363,8 @@ namespace eastl
13631363
}
13641364

13651365
fixed_vector_allocator(const fixed_vector_allocator& x)
1366+
: mOverflowAllocator(x.mOverflowAllocator), mpPoolBegin(x.mpPoolBegin)
13661367
{
1367-
mpPoolBegin = x.mpPoolBegin;
1368-
mOverflowAllocator = x.mOverflowAllocator;
13691368
}
13701369

13711370
fixed_vector_allocator& operator=(const fixed_vector_allocator& x)

include/EASTL/internal/type_compound.h

Lines changed: 25 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -128,58 +128,18 @@ namespace eastl
128128

129129
#define EASTL_TYPE_TRAIT_is_member_function_pointer_CONFORMANCE 1 // is_member_function_pointer is conforming; doesn't make mistakes.
130130

131-
// To do: Revise this to support C++11 variadic templates when possible.
132-
// To do: We can probably also use remove_cv to simply the multitude of types below.
133-
134-
template <typename T> struct is_mem_fun_pointer_value : public false_type{};
135-
136-
template <typename R, typename T> struct is_mem_fun_pointer_value<R (T::*)()> : public true_type{};
137-
template <typename R, typename T> struct is_mem_fun_pointer_value<R (T::*)() const> : public true_type{};
138-
template <typename R, typename T> struct is_mem_fun_pointer_value<R (T::*)() volatile> : public true_type{};
139-
template <typename R, typename T> struct is_mem_fun_pointer_value<R (T::*)() const volatile> : public true_type{};
140-
141-
template <typename R, typename T, typename Arg0> struct is_mem_fun_pointer_value<R (T::*)(Arg0)> : public true_type{};
142-
template <typename R, typename T, typename Arg0> struct is_mem_fun_pointer_value<R (T::*)(Arg0) const> : public true_type{};
143-
template <typename R, typename T, typename Arg0> struct is_mem_fun_pointer_value<R (T::*)(Arg0) volatile> : public true_type{};
144-
template <typename R, typename T, typename Arg0> struct is_mem_fun_pointer_value<R (T::*)(Arg0) const volatile> : public true_type{};
145-
146-
template <typename R, typename T, typename Arg0, typename Arg1> struct is_mem_fun_pointer_value<R (T::*)(Arg0, Arg1)> : public true_type{};
147-
template <typename R, typename T, typename Arg0, typename Arg1> struct is_mem_fun_pointer_value<R (T::*)(Arg0, Arg1) const> : public true_type{};
148-
template <typename R, typename T, typename Arg0, typename Arg1> struct is_mem_fun_pointer_value<R (T::*)(Arg0, Arg1) volatile> : public true_type{};
149-
template <typename R, typename T, typename Arg0, typename Arg1> struct is_mem_fun_pointer_value<R (T::*)(Arg0, Arg1) const volatile> : public true_type{};
150-
151-
template <typename R, typename T, typename Arg0, typename Arg1, typename Arg2> struct is_mem_fun_pointer_value<R (T::*)(Arg0, Arg1, Arg2)> : public true_type{};
152-
template <typename R, typename T, typename Arg0, typename Arg1, typename Arg2> struct is_mem_fun_pointer_value<R (T::*)(Arg0, Arg1, Arg2) const> : public true_type{};
153-
template <typename R, typename T, typename Arg0, typename Arg1, typename Arg2> struct is_mem_fun_pointer_value<R (T::*)(Arg0, Arg1, Arg2) volatile> : public true_type{};
154-
template <typename R, typename T, typename Arg0, typename Arg1, typename Arg2> struct is_mem_fun_pointer_value<R (T::*)(Arg0, Arg1, Arg2) const volatile> : public true_type{};
155-
156-
template <typename R, typename T, typename Arg0, typename Arg1, typename Arg2, typename Arg3> struct is_mem_fun_pointer_value<R (T::*)(Arg0, Arg1, Arg2, Arg3)> : public true_type{};
157-
template <typename R, typename T, typename Arg0, typename Arg1, typename Arg2, typename Arg3> struct is_mem_fun_pointer_value<R (T::*)(Arg0, Arg1, Arg2, Arg3) const> : public true_type{};
158-
template <typename R, typename T, typename Arg0, typename Arg1, typename Arg2, typename Arg3> struct is_mem_fun_pointer_value<R (T::*)(Arg0, Arg1, Arg2, Arg3) volatile> : public true_type{};
159-
template <typename R, typename T, typename Arg0, typename Arg1, typename Arg2, typename Arg3> struct is_mem_fun_pointer_value<R (T::*)(Arg0, Arg1, Arg2, Arg3) const volatile> : public true_type{};
160-
161-
template <typename R, typename T, typename Arg0, typename Arg1, typename Arg2, typename Arg3, typename Arg4> struct is_mem_fun_pointer_value<R (T::*)(Arg0, Arg1, Arg2, Arg3, Arg4)> : public true_type{};
162-
template <typename R, typename T, typename Arg0, typename Arg1, typename Arg2, typename Arg3, typename Arg4> struct is_mem_fun_pointer_value<R (T::*)(Arg0, Arg1, Arg2, Arg3, Arg4) const> : public true_type{};
163-
template <typename R, typename T, typename Arg0, typename Arg1, typename Arg2, typename Arg3, typename Arg4> struct is_mem_fun_pointer_value<R (T::*)(Arg0, Arg1, Arg2, Arg3, Arg4) volatile> : public true_type{};
164-
template <typename R, typename T, typename Arg0, typename Arg1, typename Arg2, typename Arg3, typename Arg4> struct is_mem_fun_pointer_value<R (T::*)(Arg0, Arg1, Arg2, Arg3, Arg4) const volatile> : public true_type{};
165-
166-
template <typename R, typename T, typename Arg0, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5> struct is_mem_fun_pointer_value<R (T::*)(Arg0, Arg1, Arg2, Arg3, Arg4, Arg5)> : public true_type{};
167-
template <typename R, typename T, typename Arg0, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5> struct is_mem_fun_pointer_value<R (T::*)(Arg0, Arg1, Arg2, Arg3, Arg4, Arg5) const> : public true_type{};
168-
template <typename R, typename T, typename Arg0, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5> struct is_mem_fun_pointer_value<R (T::*)(Arg0, Arg1, Arg2, Arg3, Arg4, Arg5) volatile> : public true_type{};
169-
template <typename R, typename T, typename Arg0, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5> struct is_mem_fun_pointer_value<R (T::*)(Arg0, Arg1, Arg2, Arg3, Arg4, Arg5) const volatile> : public true_type{};
170-
171-
template <typename R, typename T, typename Arg0, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6> struct is_mem_fun_pointer_value<R (T::*)(Arg0, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6)> : public true_type{};
172-
template <typename R, typename T, typename Arg0, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6> struct is_mem_fun_pointer_value<R (T::*)(Arg0, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6) const> : public true_type{};
173-
template <typename R, typename T, typename Arg0, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6> struct is_mem_fun_pointer_value<R (T::*)(Arg0, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6) volatile> : public true_type{};
174-
template <typename R, typename T, typename Arg0, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6> struct is_mem_fun_pointer_value<R (T::*)(Arg0, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6) const volatile> : public true_type{};
175-
176-
template <typename R, typename T, typename Arg0, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6, typename Arg7> struct is_mem_fun_pointer_value<R (T::*)(Arg0, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7)> : public true_type{};
177-
template <typename R, typename T, typename Arg0, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6, typename Arg7> struct is_mem_fun_pointer_value<R (T::*)(Arg0, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7) const> : public true_type{};
178-
template <typename R, typename T, typename Arg0, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6, typename Arg7> struct is_mem_fun_pointer_value<R (T::*)(Arg0, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7) volatile> : public true_type{};
179-
template <typename R, typename T, typename Arg0, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6, typename Arg7> struct is_mem_fun_pointer_value<R (T::*)(Arg0, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7) const volatile> : public true_type{};
131+
namespace internal
132+
{
133+
template<typename T>
134+
struct is_member_function_pointer_helper : false_type {};
180135

181-
template <typename T>
182-
struct is_member_function_pointer : public integral_constant<bool, is_mem_fun_pointer_value<T>::value>{};
136+
template<typename T, typename U>
137+
struct is_member_function_pointer_helper<T U::*> : is_function<T> {};
138+
}
139+
140+
template<typename T>
141+
struct is_member_function_pointer
142+
: internal::is_member_function_pointer_helper<typename remove_cv<T>::type> {};
183143

184144
#if EASTL_VARIABLE_TEMPLATES_ENABLED
185145
template<typename T>
@@ -198,13 +158,19 @@ namespace eastl
198158

199159
#define EASTL_TYPE_TRAIT_is_member_pointer_CONFORMANCE 1 // is_member_pointer is conforming; doesn't make mistakes.
200160

201-
template <typename T>
202-
struct is_member_pointer
203-
: public eastl::integral_constant<bool, eastl::is_member_function_pointer<T>::value>{};
161+
namespace internal {
162+
template <typename T>
163+
struct is_member_pointer_helper
164+
: public eastl::false_type {};
204165

205-
template <typename T, typename U>
206-
struct is_member_pointer<U T::*>
207-
: public eastl::true_type{};
166+
template <typename T, typename U>
167+
struct is_member_pointer_helper<U T::*>
168+
: public eastl::true_type {};
169+
}
170+
171+
template<typename T>
172+
struct is_member_pointer
173+
: public internal::is_member_pointer_helper<typename remove_cv<T>::type>::type {};
208174

209175
#if EASTL_VARIABLE_TEMPLATES_ENABLED
210176
template<typename T>
@@ -690,7 +656,7 @@ namespace eastl
690656
///////////////////////////////////////////////////////////////////////
691657
// is_final
692658
///////////////////////////////////////////////////////////////////////
693-
#if EA_COMPILER_HAS_FEATURE(is_final)
659+
#if EASTL_IS_FINAL_AVAILABLE == 1
694660
template <typename T>
695661
struct is_final : public integral_constant<bool, __is_final(T)> {};
696662
#else
@@ -722,7 +688,7 @@ namespace eastl
722688
// * no default member initializers
723689
//
724690
///////////////////////////////////////////////////////////////////////
725-
#if EA_COMPILER_HAS_FEATURE(is_aggregate) || defined(_MSC_VER) && (_MSC_VER >= 1916) // VS2017 15.9+
691+
#if EASTL_IS_AGGREGATE_AVAILABLE == 1
726692
#define EASTL_TYPE_TRAIT_is_aggregate_CONFORMANCE 1
727693

728694
template <typename T>

include/EASTL/internal/type_pod.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -693,7 +693,7 @@ namespace eastl
693693
//
694694

695695
template <typename T>
696-
struct is_trivially_copyable { static const bool value = __is_trivially_copyable(T); };
696+
struct is_trivially_copyable : public bool_constant<__is_trivially_copyable(T)> {};
697697

698698
#elif EASTL_COMPILER_INTRINSIC_TYPE_TRAITS_AVAILABLE && (defined(EA_COMPILER_MSVC) || defined(EA_COMPILER_GNUC))
699699
#define EASTL_TYPE_TRAIT_is_trivially_copyable_CONFORMANCE 1
@@ -850,7 +850,7 @@ namespace eastl
850850
// whether the __is_trivially_constructible compiler intrinsic is available.
851851

852852
// If the compiler has this trait built-in (which ideally all compilers would have since it's necessary for full conformance) use it.
853-
#if EASTL_COMPILER_INTRINSIC_TYPE_TRAITS_AVAILABLE && (defined(__clang__) && EA_COMPILER_HAS_FEATURE(is_trivially_constructible))
853+
#if EASTL_COMPILER_INTRINSIC_TYPE_TRAITS_AVAILABLE && ((defined(__clang__) && EA_COMPILER_HAS_FEATURE(is_trivially_constructible)) || defined(EA_COMPILER_MSVC))
854854

855855
template <typename T, typename Arg0 = eastl::unused>
856856
struct is_trivially_constructible
@@ -915,7 +915,7 @@ namespace eastl
915915
#else
916916

917917
// If the compiler has this trait built-in (which ideally all compilers would have since it's necessary for full conformance) use it.
918-
#if EASTL_COMPILER_INTRINSIC_TYPE_TRAITS_AVAILABLE && (defined(__clang__) && EA_COMPILER_HAS_FEATURE(is_trivially_constructible))
918+
#if EASTL_COMPILER_INTRINSIC_TYPE_TRAITS_AVAILABLE && ((defined(__clang__) && EA_COMPILER_HAS_FEATURE(is_trivially_constructible)) || defined(EA_COMPILER_MSVC))
919919
#define EASTL_TYPE_TRAIT_is_trivially_constructible_CONFORMANCE 1
920920

921921
// We have a problem with clang here as of clang 3.4: __is_trivially_constructible(int[]) is false, yet I believe it should be true.

0 commit comments

Comments
 (0)