EASTL stands for Electronic Arts Standard Template Library. It is an extensive and robust implementation that has an emphasis on high performance.
BSD-3-CLAUSE License
Bot releases are hidden (Show)
This version of EASTL contains a number of improvements, including many bug fixes found through the use of undefined behaviour sanitizer (UBSan), as well as a swathe of deprecations.
Changes:
deque::insert()
overloads that were missing a return.deque::insert(position, first, last)
compilable for input (single pass) iterators.EASTL_SIZE_T_32BIT
is set to 1.eastl::bitvector
so we don't inhibit move constructor/assignment.eastl::bitvector
.vector_map<Key, T>::at_key()
overloads as the inherited vector<pair<const Key, T>>::at()
function doesn't have the correct semantics and returns the incorrect type (pair<const Key, T>&
rather than T
).is_partitioned
and partition_point
to algorithms.h
.n > 0
before calling memcmp()
in char_trait's Compare()
and lexicographical_compare()
to avoid undefined behaviour.n > 0
before calling memmove()
in copy_backward()
or move_backward()
to avoid undefined behaviour.first != last
before calling memcpy()
in uninitialized_relocate_start()
(which is deprecated) to avoid undefined behaviour.tuple
default constructible when an element type has no member types (which tuple
has an empty base optimization for).eastl::pair
so it can be trivially copied if the template parameters are trivially copyable.printf
format specifiers for use with eastl_size_t
that work with both 32- and 64-bit sizes.rb_tree
.nullptr
arithmetic, which is undefined behaviour.random_shuffle
so it doesn't overrun the iterator when first == last
.tim_sort_buffer
so it doesn't invoke undefined behaviour when called on empty vectors.radix_sort_impl
so it doesn't over-right-shifts on it's last loop when trying to write to the histogram.shell_sort
so it doesn't overrun the iterator in the loop increment expression.operator new
.list_map_iterator::mpNode
private and change its type to avoid various insances of undefined behaviour when downcasting the anchor node, which is has type list_map_data_base
but isn't a list_map_data<T>
. No replacement accessor has been provided as mpNode
is an internal impelmentation detail that isn't useful for users.rbtree_iterator::mpNode
private and change its type to avoid various insances of undefined behaviour when downcasting the anchor node, which is has type rbtree_node_base
but isn't a rbtree_node<T>
. No replacement accessor has been provided as mpNode
is an internal impelmentation detail that isn't useful for users.atomic<T>
.intrusive_list_iterator::mpNode
private and change its type to avoid various insances of undefined behaviour when downcasting the anchor node, which is has type intrusive_list_node
but isn't a T
. A helper function nodePtr()
has been provided, which is equivalent to accessing the old member directly.__has_trivial_constructor
that is deprecated in latest version of clang.ListIterator<T>::mpNode
from ListNode<T>*
to ListNodeBase*
to avoid various instances of undefined behaviour when downcasting the anchor node which is a ListNodeBase but not a ListNode<T>
.SListIterator<T>::mpNode
from SListNode<T>*
to SListNodeBase*
to avoid various instances of undefined behaviour when downcasting the anchor node which is an SListNodeBase
but not a SListNode<T>
.EASTL_LIST_PROXY_ENABLED
, there's no configuration in which it is enabled and enabling it explicitly causes compile errors that we're not interested in fixing.extract_signature_from_callable
compiler fix for C++14.invoke
in apply
to prevent any ambiguity with other invoke functions.function
.atomic_push_compiler_optins.h
header.tuple_cat
for calls with l-values and for calls with less than two arguments.array<T, N>
behaviour: array<T, 0>
no longer has size() == 1
. Deprecate count enumerator.is_trivially_copyable<T>
.array<T, N>
.EXPECT_ASSERT
for windows-clang when exceptions are disabled to fix compile break.Deprecations:
The following deprecations will be removed approximately April 2024.
Published by liam-mitchell almost 3 years ago
Welcome to the 3.18.00 release of EASTL. Thank you to everyone who's contributed to this release.
Feature additions and standard updates:
Bugfixes:
eastl::invoke fixes:
eastl::variant fixes:
Removed assertions from some eastl::array functions in order to ensure usability in constexpr contexts.
eastl::make_signed and eastl::make_unsigned now work correctly for enum types and volatile-qualified types.
Containers which support find_as now support using it with keys of the same type as the container's key.
Disallowed use of smart pointer default deleter on incomplete types.
Fixed an issue where nodes for some data structures could be under-aligned.
Properly supported arrays in eastl::cbegin() and eastl::cend().
Fixed creation of zero-length spans and subspans.
eastl::is_reference now returns true for rvalue references.
Fixed a potential out-of-bounds memory access when sorting certain containers.
Optimizations:
Published by MaxEWinkler over 3 years ago
Minor spelling and grammar corrections. (#396)
Using of qualified eastl move() and forward() functions. (#405)
Fixed warnings in function_detail.h on MSVC at warning level 4. (#400)
Fix get(variant) when variant is a rvalue (#406)
Using of qualified eastl functions. (#407)
Removed extra parentheses on eastl::move's return statement (#409)
[EASTL 3.17.06] (#412)
Thanks to all committers for this EASTL release.
Published by MaxEWinkler almost 4 years ago
[EASTL 3.17.03] (#397)
EASTL: lru_cache iteration tests and added support for initializer_lists
eastl::atomic : fixed msvc compiler warning 4459
Published by MaxEWinkler almost 4 years ago
rbtree::emplace_hint() compilation fix for variadic arg use (#392)
Fix hint-versions of rbtree class variadic insertion methods: parameter pack and move semantics support.
Fix hashtable::insert() to satisfy new map tests.
Fixed typo in Deque comments (#394)
[EASTL 3.17.02] (#395)
eastl::atomic
EASTL: to_array implementation
EASTL: fix for rbtree input iterator ctor moving elements from the source container
Published by MaxEWinkler about 4 years ago
128-bit integral feature define fix (#393)
Published by MaxEWinkler about 4 years ago
Ensure the alignment of a node<value_type> is the alignment of the whole node allocation, not just the user type
Removing old compiler special case code for EA_CPP14_CONSTEXPR
Adding eastl::string hash tests and removing an addition overload in the helper template that contrains usage to enum types.
Fixing user reported regression when attempting to use fancy pointers in a tuple
Resolving uint128_t hashing compiler errors from properly limiting the generic template for enums
eastl::pair adding C++17 structured bindings unpacking support
eastl::atomic implementation - See EASTL/atomic.h for documentation
eastl::function - Optimized function call operator
- see Invoker() in function_detail.h for explanation of the optimization
Consolidate Warnings by using EA_DISABLE_WARNING macros
Reverting the UDL warning suppression because of push/pop mismatch issues with the EABase warning suppression macros
eastl::variant - Fixed variant warnings due to not sfinae overloads that are not the same type but still comparable
- improved code gen on msvc
- added tests
Removed unndeded allocator_traits headers
Added comments on reverse_wrapper
Removed sparse_matrix.h as it was removed internally quite a while ago
Updated files that had slight differences to internal eastl
Update travis CI to use g++-9 && clang++-11
Updated README and CONTRIBUTING to allow contributors to submit their info under the contributors section
cleared mpPtrArray in base destructor #389
Add eastl::span<*> to EASTL.natvis #386
Fix typo in doc #384
Fix reverse adaptor when using on a rvalue range #382
Fix GCC 9 string SSO segfault #380
eastl::shared_ptr<>::reset(): function not thread safe #378
Enable compilation without building tests #359
Fix tuple vector assign #374
fixed unique_ptr<[]>::reset() instructions order. Internal pointer must be updated before deleting object #375
Published by MaxEWinkler over 4 years ago
fixing spelling mistake in eastl::basic_string
Fix for insertion_sort() doing a --(BiDirectionalIterator.begin()) which is an illegal operation and causes crashes on containers such as eastl::deque.
eastl::optional_storage - remove unneeded union and trivial type initialization since we use eastl::aligned_storage_t, remove unreferenced internal member function
resolving 32-bit eastl_size_t compiler error
EASTL_ALIGN_OF porting to C++11 alignof keyword.
EASTL_EMPTY_REFERENCE_ASSERT_ENABLED when enabled would not assert when taking a reference to an empty container.
Example, eastl::vector[0] would not assert that a null reference was being taken if the vector was empty.
fixing shared_ptr compiler error when passing nullptr with a custom deleter lambda
fixed unique_ptr::reset() instructions order. Internal pointer must be updated before deleting object (#373)
fixed unique_ptr<[]>::reset() instructions order. Internal pointer must be updated before deleting object (#375)
fixed adl with exchange inside unique_ptr to be fully qualified
fix bitvector iterators (#358)
use mContainer.begin() instead of &mContainer[0],
since it causes out of bounds exception in non release build
Fix circular dependency in fixed_function.h (#350)
Published by rparolin about 5 years ago
Published by rparolin over 5 years ago
Published by rparolin over 5 years ago
Published by rparolin over 5 years ago