Skip to content

Commit f518b17

Browse files
author
questor
committed
updated to latest version
1 parent 9066673 commit f518b17

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+4656
-3310
lines changed

algorithm.h

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,6 @@
250250
#include <eastl/iterator.h>
251251
#include <eastl/functional.h>
252252
#include <eastl/utility.h>
253-
#include <eastl/internal/generic_iterator.h>
254253
#include <eastl/random.h>
255254
#include <eastl/compare.h>
256255

@@ -1282,11 +1281,12 @@ namespace eastl
12821281
}
12831282

12841283

1285-
// We have a second layer of unwrap_iterator calls because the original iterator might be something like move_iterator<generic_iterator<int*> > (i.e. doubly-wrapped).
12861284
template <bool isMove, typename BidirectionalIterator1, typename BidirectionalIterator2>
1287-
inline BidirectionalIterator2 move_and_copyBackward_unwrapper(BidirectionalIterator1 first, BidirectionalIterator1 last, BidirectionalIterator2 resultEnd)
1285+
EASTL_REMOVE_AT_2024_SEPT inline BidirectionalIterator2 move_and_copyBackward_unwrapper(BidirectionalIterator1 first, BidirectionalIterator1 last, BidirectionalIterator2 resultEnd)
12881286
{
1287+
EASTL_INTERNAL_DISABLE_DEPRECATED() // 'unwrap_iterator': was declared deprecated
12891288
return BidirectionalIterator2(eastl::move_and_copyBackward_chooser<isMove>(eastl::unwrap_iterator(first), eastl::unwrap_iterator(last), eastl::unwrap_iterator(resultEnd))); // Have to convert to BidirectionalIterator2 because result.base() could be a T*
1289+
EASTL_INTERNAL_RESTORE_DEPRECATED()
12901290
}
12911291

12921292

@@ -1314,7 +1314,7 @@ namespace eastl
13141314
template <typename BidirectionalIterator1, typename BidirectionalIterator2>
13151315
inline BidirectionalIterator2 move_backward(BidirectionalIterator1 first, BidirectionalIterator1 last, BidirectionalIterator2 resultEnd)
13161316
{
1317-
return eastl::move_and_copyBackward_unwrapper<true>(eastl::unwrap_iterator(first), eastl::unwrap_iterator(last), resultEnd);
1317+
return eastl::move_and_copyBackward_chooser<true>(first, last, resultEnd);
13181318
}
13191319

13201320

@@ -1335,9 +1335,7 @@ namespace eastl
13351335
template <typename BidirectionalIterator1, typename BidirectionalIterator2>
13361336
inline BidirectionalIterator2 copyBackward(BidirectionalIterator1 first, BidirectionalIterator1 last, BidirectionalIterator2 resultEnd)
13371337
{
1338-
const bool isMove = eastl::is_move_iterator<BidirectionalIterator1>::value; EA_UNUSED(isMove);
1339-
1340-
return eastl::move_and_copyBackward_unwrapper<isMove>(eastl::unwrap_iterator(first), eastl::unwrap_iterator(last), resultEnd);
1338+
return eastl::move_and_copyBackward_chooser<false>(first, last, resultEnd);
13411339
}
13421340

13431341

any.h

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -193,14 +193,19 @@ namespace eastl
193193
refAny.m_handler = nullptr;
194194
}
195195

196+
static void* get(const any* pThis)
197+
{
198+
EASTL_ASSERT(pThis);
199+
return (void*)(&pThis->m_storage.internal_storage);
200+
}
201+
196202
static void* handler_func(storage_operation op, const any* pThis, any* pOther)
197203
{
198204
switch (op)
199205
{
200206
case storage_operation::GET:
201207
{
202-
EASTL_ASSERT(pThis);
203-
return (void*)(&pThis->m_storage.internal_storage);
208+
return get(pThis);
204209
}
205210
break;
206211

@@ -280,15 +285,20 @@ namespace eastl
280285
refAny.m_handler = nullptr;
281286
}
282287

288+
static void* get(const any* pThis)
289+
{
290+
EASTL_ASSERT(pThis);
291+
EASTL_ASSERT(pThis->m_storage.external_storage);
292+
return static_cast<void*>(pThis->m_storage.external_storage);
293+
}
294+
283295
static void* handler_func(storage_operation op, const any* pThis, any* pOther)
284296
{
285297
switch (op)
286298
{
287299
case storage_operation::GET:
288300
{
289-
EASTL_ASSERT(pThis);
290-
EASTL_ASSERT(pThis->m_storage.external_storage);
291-
return static_cast<void*>(pThis->m_storage.external_storage);
301+
return get(pThis);
292302
}
293303
break;
294304

@@ -456,25 +466,27 @@ namespace eastl
456466
// 20.7.3.3, modifiers
457467
#if EASTL_VARIADIC_TEMPLATES_ENABLED
458468
template <class T, class... Args>
459-
void emplace(Args&&... args)
469+
typename eastl::enable_if<eastl::is_constructible_v<eastl::decay_t<T>, Args...> && eastl::is_copy_constructible_v<eastl::decay_t<T>>, eastl::decay_t<T>&>::type
470+
emplace(Args&&... args)
460471
{
461472
typedef storage_handler<decay_t<T>> StorageHandlerT;
462-
static_assert(eastl::is_constructible<T, Args...>::value, "T must be constructible with Args...");
463473

464474
reset();
465475
StorageHandlerT::construct_inplace(m_storage, eastl::forward<Args>(args)...);
466476
m_handler = &StorageHandlerT::handler_func;
477+
return *static_cast<decay_t<T>*>(StorageHandlerT::get(this));
467478
}
468479

469480
template <class NT, class U, class... Args>
470-
typename eastl::enable_if<eastl::is_constructible<NT, std::initializer_list<U>&, Args...>::value, void>::type
481+
typename eastl::enable_if<eastl::is_constructible_v<eastl::decay_t<NT>, std::initializer_list<U>&, Args...> && eastl::is_copy_constructible_v<eastl::decay_t<NT>>, eastl::decay_t<NT>&>::type
471482
emplace(std::initializer_list<U> il, Args&&... args)
472483
{
473484
typedef storage_handler<decay_t<NT>> StorageHandlerT;
474485

475486
reset();
476487
StorageHandlerT::construct_inplace(m_storage, il, eastl::forward<Args>(args)...);
477488
m_handler = &StorageHandlerT::handler_func;
489+
return *static_cast<decay_t<NT>*>(StorageHandlerT::get(this));
478490
}
479491
#endif
480492

array.h

Lines changed: 36 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@
2929
EA_RESTORE_ALL_VC_WARNINGS()
3030
#endif
3131

32+
// 4512/4626 - 'class' : assignment operator could not be generated. // This disabling would best be put elsewhere.
33+
EA_DISABLE_VC_WARNING(4512 4626);
34+
3235
#if defined(EASTL_PRAGMA_ONCE_SUPPORTED)
3336
#pragma once // Some compilers (e.g. VC++) benefit significantly from using this. We've measured 3-4% build speed improvements in apps as a result.
3437
#endif
@@ -152,11 +155,11 @@ namespace eastl
152155

153156
// We intentionally provide no constructor, destructor, or assignment operator.
154157

155-
void fill(const value_type& value) {}
158+
void fill(const value_type&) {}
156159

157160
// Unlike the swap function for other containers, array::swap takes linear time,
158161
// may exit via an exception, and does not cause iterators to become associated with the other container.
159-
void swap(this_type& x) EASTL_NOEXCEPT {}
162+
void swap(this_type&) EASTL_NOEXCEPT {}
160163

161164
EA_CPP14_CONSTEXPR iterator begin() EASTL_NOEXCEPT { return nullptr; }
162165
EA_CPP14_CONSTEXPR const_iterator begin() const EASTL_NOEXCEPT { return nullptr; }
@@ -181,9 +184,11 @@ namespace eastl
181184
EA_CPP14_CONSTEXPR T* data() EASTL_NOEXCEPT { return nullptr; }
182185
EA_CPP14_CONSTEXPR const T* data() const EASTL_NOEXCEPT { return nullptr; }
183186

184-
EA_CPP14_CONSTEXPR reference operator[](size_type i) { return *data(); }
185-
EA_CPP14_CONSTEXPR const_reference operator[](size_type i) const { return *data(); }
186-
EA_CPP14_CONSTEXPR const_reference at(size_type i) const
187+
EA_CPP14_CONSTEXPR reference operator[](size_type) { return *data(); }
188+
EA_CPP14_CONSTEXPR const_reference operator[](size_type) const { return *data(); }
189+
190+
EA_DISABLE_VC_WARNING(4702); // unreachable code
191+
EA_CPP14_CONSTEXPR const_reference at(size_type) const
187192
{
188193
#if EASTL_EXCEPTIONS_ENABLED
189194
throw std::out_of_range("array::at -- out of range");
@@ -192,7 +197,10 @@ namespace eastl
192197
#endif
193198
return *data();
194199
}
195-
EA_CPP14_CONSTEXPR reference at(size_type i)
200+
EA_RESTORE_VC_WARNING();
201+
202+
EA_DISABLE_VC_WARNING(4702); // unreachable code
203+
EA_CPP14_CONSTEXPR reference at(size_type)
196204
{
197205
#if EASTL_EXCEPTIONS_ENABLED
198206
throw std::out_of_range("array::at -- out of range");
@@ -201,6 +209,7 @@ namespace eastl
201209
#endif
202210
return *data();
203211
}
212+
EA_RESTORE_VC_WARNING();
204213

205214
EA_CPP14_CONSTEXPR reference front() { return *data(); }
206215
EA_CPP14_CONSTEXPR const_reference front() const { return *data(); }
@@ -209,7 +218,7 @@ namespace eastl
209218
EA_CPP14_CONSTEXPR const_reference back() const { return *data(); }
210219

211220
bool validate() const { return true; }
212-
int validateIterator(const_iterator i) const { return isf_none; }
221+
int validateIterator(const_iterator) const { return isf_none; }
213222

214223
}; // class array
215224

@@ -365,6 +374,15 @@ namespace eastl
365374
EA_CPP14_CONSTEXPR inline typename array<T, N>::reference
366375
array<T, N>::operator[](size_type i)
367376
{
377+
#if EASTL_ASSERT_ENABLED && EASTL_EMPTY_REFERENCE_ASSERT_ENABLED
378+
if (EASTL_UNLIKELY(i >= N))
379+
EASTL_FAIL_MSG("array::operator[] -- out of range");
380+
#elif EASTL_ASSERT_ENABLED
381+
// We allow taking a reference to arr[0]
382+
if (EASTL_UNLIKELY((i != 0) && i >= N))
383+
EASTL_FAIL_MSG("array::operator[] -- out of range");
384+
#endif
385+
368386
return mValue[i];
369387
}
370388

@@ -373,6 +391,15 @@ namespace eastl
373391
EA_CPP14_CONSTEXPR inline typename array<T, N>::const_reference
374392
array<T, N>::operator[](size_type i) const
375393
{
394+
#if EASTL_ASSERT_ENABLED && EASTL_EMPTY_REFERENCE_ASSERT_ENABLED
395+
if (EASTL_UNLIKELY(i >= N))
396+
EASTL_FAIL_MSG("array::operator[] -- out of range");
397+
#elif EASTL_ASSERT_ENABLED
398+
// We allow taking a reference to arr[0]
399+
if (EASTL_UNLIKELY((i != 0) && i >= N))
400+
EASTL_FAIL_MSG("array::operator[] -- out of range");
401+
#endif
402+
376403
return mValue[i];
377404
}
378405

@@ -649,6 +676,8 @@ struct tuple_element<I, eastl::array<T, N>> : public eastl::tuple_element<I, eas
649676
#endif
650677

651678

679+
EA_RESTORE_VC_WARNING();
680+
652681
#endif // Header include guard
653682

654683

bit.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
#include <eastl/internal/memory_base.h>
1515
#include <eastl/type_traits.h>
16+
#include <eastl/numeric_limits.h>
1617
#include <string.h> // memcpy
1718

1819
namespace eastl

0 commit comments

Comments
 (0)