Nugget
|
#include <slist.h>
Public Types | |
typedef T | value_type |
typedef value_type * | pointer |
typedef const value_type * | const_pointer |
typedef value_type & | reference |
typedef const value_type & | const_reference |
typedef SListIterator< T, T *, T & > | iterator |
typedef SListIterator< T, const T *, const T & > | const_iterator |
typedef base_type::size_type | size_type |
typedef base_type::difference_type | difference_type |
typedef base_type::allocator_type | allocator_type |
typedef base_type::node_type | node_type |
typedef base_type::base_node_type | base_node_type |
Public Types inherited from eastl::SListBase< T, EASTLAllocatorType > | |
typedef EASTLAllocatorType | allocator_type |
typedef SListNode< T > | node_type |
typedef eastl_size_t | size_type |
typedef ptrdiff_t | difference_type |
typedef SListNodeBase | base_node_type |
Public Member Functions | |
slist (const allocator_type &allocator) | |
slist (size_type n, const allocator_type &allocator=EASTL_SLIST_DEFAULT_ALLOCATOR) | |
slist (size_type n, const value_type &value, const allocator_type &allocator=EASTL_SLIST_DEFAULT_ALLOCATOR) | |
slist (const this_type &x) | |
slist (std::initializer_list< value_type > ilist, const allocator_type &allocator=EASTL_SLIST_DEFAULT_ALLOCATOR) | |
slist (this_type &&x) | |
slist (this_type &&x, const allocator_type &allocator) | |
template<typename InputIterator > | |
slist (InputIterator first, InputIterator last) | |
this_type & | operator= (const this_type &x) |
this_type & | operator= (std::initializer_list< value_type >) |
this_type & | operator= (this_type &&x) |
void | swap (this_type &x) |
void | assign (size_type n, const value_type &value) |
void | assign (std::initializer_list< value_type > ilist) |
template<typename InputIterator > | |
void | assign (InputIterator first, InputIterator last) |
iterator | begin () EA_NOEXCEPT |
const_iterator | begin () const EA_NOEXCEPT |
const_iterator | cbegin () const EA_NOEXCEPT |
iterator | end () EA_NOEXCEPT |
const_iterator | end () const EA_NOEXCEPT |
const_iterator | cend () const EA_NOEXCEPT |
iterator | before_begin () EA_NOEXCEPT |
const_iterator | before_begin () const EA_NOEXCEPT |
const_iterator | cbefore_begin () const EA_NOEXCEPT |
iterator | previous (const_iterator position) |
const_iterator | previous (const_iterator position) const |
reference | front () |
const_reference | front () const |
template<class... Args> | |
void | emplace_front (Args &&... args) |
void | push_front (const value_type &value) |
reference | push_front () |
void | push_front (value_type &&value) |
void | pop_front () |
bool | empty () const EA_NOEXCEPT |
size_type | size () const EA_NOEXCEPT |
void | resize (size_type n, const value_type &value) |
void | resize (size_type n) |
iterator | insert (const_iterator position) |
iterator | insert (const_iterator position, const value_type &value) |
void | insert (const_iterator position, size_type n, const value_type &value) |
template<typename InputIterator > | |
void | insert (const_iterator position, InputIterator first, InputIterator last) |
iterator | insert_after (const_iterator position) |
iterator | insert_after (const_iterator position, const value_type &value) |
iterator | insert_after (const_iterator position, size_type n, const value_type &value) |
iterator | insert_after (const_iterator position, std::initializer_list< value_type > ilist) |
iterator | insert_after (const_iterator position, value_type &&value) |
template<class... Args> | |
iterator | emplace_after (const_iterator position, Args &&... args) |
template<typename InputIterator > | |
iterator | insert_after (const_iterator position, InputIterator first, InputIterator last) |
iterator | erase (const_iterator position) |
iterator | erase (const_iterator first, const_iterator last) |
iterator | erase_after (const_iterator position) |
iterator | erase_after (const_iterator before_first, const_iterator last) |
void | clear () EA_NOEXCEPT |
void | reset_lose_memory () EA_NOEXCEPT |
void | remove (const value_type &value) |
template<typename Predicate > | |
void | remove_if (Predicate predicate) |
void | reverse () EA_NOEXCEPT |
void | splice (const_iterator position, this_type &x) |
void | splice (const_iterator position, this_type &x, const_iterator i) |
void | splice (const_iterator position, this_type &x, const_iterator first, const_iterator last) |
void | splice (const_iterator position, this_type &&x) |
void | splice (const_iterator position, this_type &&x, const_iterator i) |
void | splice (const_iterator position, this_type &&x, const_iterator first, const_iterator last) |
void | splice_after (const_iterator position, this_type &x) |
void | splice_after (const_iterator position, this_type &x, const_iterator i) |
void | splice_after (const_iterator position, this_type &x, const_iterator first, const_iterator last) |
void | splice_after (const_iterator position, this_type &&x) |
void | splice_after (const_iterator position, this_type &&x, const_iterator i) |
void | splice_after (const_iterator position, this_type &&x, const_iterator first, const_iterator last) |
void | splice_after (const_iterator position, const_iterator before_first, const_iterator before_last) |
void | splice_after (const_iterator position, const_iterator previous) |
void | sort () |
template<class Compare > | |
void | sort (Compare compare) |
bool | validate () const |
int | validate_iterator (const_iterator i) const |
SListNodeBase * | DoEraseAfter (SListNodeBase *pNode) |
SListNodeBase * | DoEraseAfter (SListNodeBase *pNode, SListNodeBase *pNodeLast) |
node_type * | DoAllocateNode () |
void | DoFreeNode (node_type *pNode) |
base_node_type & | internalNode () EA_NOEXCEPT |
base_node_type const & | internalNode () const EA_NOEXCEPT |
allocator_type & | internalAllocator () EA_NOEXCEPT |
const allocator_type & | internalAllocator () const EA_NOEXCEPT |
Public Member Functions inherited from eastl::SListBase< T, EASTLAllocatorType > | |
const allocator_type & | get_allocator () const EA_NOEXCEPT |
allocator_type & | get_allocator () EA_NOEXCEPT |
void | set_allocator (const allocator_type &allocator) |
Public Attributes | |
eastl::compressed_pair< base_node_type, allocator_type > | mNodeAllocator |
Protected Member Functions | |
node_type * | DoCreateNode () |
template<typename... Args> | |
node_type * | DoCreateNode (Args &&... args) |
template<typename Integer > | |
void | DoAssign (Integer n, Integer value, true_type) |
template<typename InputIterator > | |
void | DoAssign (InputIterator first, InputIterator last, false_type) |
void | DoAssignValues (size_type n, const value_type &value) |
template<typename InputIterator > | |
node_type * | DoInsertAfter (SListNodeBase *pNode, InputIterator first, InputIterator last) |
template<typename Integer > | |
node_type * | DoInsertAfter (SListNodeBase *pNode, Integer n, Integer value, true_type) |
template<typename InputIterator > | |
node_type * | DoInsertAfter (SListNodeBase *pNode, InputIterator first, InputIterator last, false_type) |
node_type * | DoInsertValueAfter (SListNodeBase *pNode) |
node_type * | DoInsertValuesAfter (SListNodeBase *pNode, size_type n, const value_type &value) |
template<typename... Args> | |
node_type * | DoInsertValueAfter (SListNodeBase *pNode, Args &&... args) |
void | DoSwap (this_type &x) |
Protected Member Functions inherited from eastl::SListBase< T, EASTLAllocatorType > | |
base_node_type & | internalNode () EA_NOEXCEPT |
base_node_type const & | internalNode () const EA_NOEXCEPT |
allocator_type & | internalAllocator () EA_NOEXCEPT |
const allocator_type & | internalAllocator () const EA_NOEXCEPT |
SListBase (const allocator_type &a) | |
node_type * | DoAllocateNode () |
void | DoFreeNode (node_type *pNode) |
SListNodeBase * | DoEraseAfter (SListNodeBase *pNode) |
SListNodeBase * | DoEraseAfter (SListNodeBase *pNode, SListNodeBase *pNodeLast) |
Additional Inherited Members | |
Protected Attributes inherited from eastl::SListBase< T, EASTLAllocatorType > | |
eastl::compressed_pair< base_node_type, allocator_type > | mNodeAllocator |
slist
This is the equivalent of C++11's forward_list.
– size() is O(n) – Note that as of this writing, list::size() is an O(n) operation when EASTL_SLIST_SIZE_CACHE is disabled. That is, getting the size of the list is not a fast operation, as it requires traversing the list and counting the nodes. We could make list::size() be fast by having a member mSize variable. There are reasons for having such functionality and reasons for not having such functionality. We currently choose to not have a member mSize variable as it would add four bytes to the class, add a tiny amount of processing to functions such as insert and erase, and would only serve to improve the size function, but no others. The alternative argument is that the C++ standard states that std::list should be an O(1) operation (i.e. have a member size variable), most C++ standard library list implementations do so, the size is but an integer which is quick to update, and many users expect to have a fast size function. The EASTL_SLIST_SIZE_CACHE option changes this. To consider: Make size caching an optional template parameter.
Pool allocation If you want to make a custom memory pool for a list container, your pool needs to contain items of type slist::node_type. So if you have a memory pool that has a constructor that takes the size of pool items and the count of pool items, you would do this (assuming that MemoryPool implements the Allocator interface): typedef slist<Widget, MemoryPool> WidgetList; // Delare your WidgetList type. MemoryPool myPool(sizeof(WidgetList::node_type), 100); // Make a pool of 100 Widget nodes. WidgetList myList(&myPool); // Create a list that uses the pool.