Nugget
|
#include <set.h>
Public Types | |
typedef rbtree< Key, Key, Compare, Allocator, eastl::use_self< Key >, false, true > | base_type |
typedef set< Key, Compare, Allocator > | this_type |
typedef base_type::size_type | size_type |
typedef base_type::value_type | value_type |
typedef base_type::iterator | iterator |
typedef base_type::const_iterator | const_iterator |
typedef base_type::reverse_iterator | reverse_iterator |
typedef base_type::const_reverse_iterator | const_reverse_iterator |
typedef base_type::allocator_type | allocator_type |
typedef Compare | value_compare |
Public Types inherited from eastl::rbtree< Key, Key, eastl::less< Key >, EASTLAllocatorType, eastl::use_self< Key >, false, true > | |
typedef ptrdiff_t | difference_type |
typedef eastl_size_t | size_type |
typedef Key | key_type |
typedef Key | value_type |
typedef rbtree_node< value_type > | node_type |
typedef value_type & | reference |
typedef const value_type & | const_reference |
typedef value_type * | pointer |
typedef const value_type * | const_pointer |
typedef type_select< bMutableIterators, rbtree_iterator< value_type, value_type *, value_type & >, rbtree_iterator< value_type, const value_type *, const value_type & > >::type | iterator |
typedef rbtree_iterator< value_type, const value_type *, const value_type & > | const_iterator |
typedef eastl::reverse_iterator< iterator > | reverse_iterator |
typedef eastl::reverse_iterator< const_iterator > | const_reverse_iterator |
typedef EASTLAllocatorType | allocator_type |
typedef eastl::less< Key > | key_compare |
typedef type_select< bUniqueKeys, eastl::pair< iterator, bool >, iterator >::type | insert_return_type |
typedef rbtree< Key, Key, eastl::less< Key >, EASTLAllocatorType, eastl::use_self< Key >, bMutableIterators, bUniqueKeys > | this_type |
typedef rb_base< Key, Key, eastl::less< Key >, eastl::use_self< Key >, bUniqueKeys, this_type > | base_type |
typedef integral_constant< bool, bUniqueKeys > | has_unique_keys_type |
typedef base_type::extract_key | extract_key |
Public Types inherited from eastl::rb_base< Key, Value, Compare, ExtractKey, bUniqueKeys, RBTree > | |
typedef ExtractKey | extract_key |
Public Member Functions | |
set (const allocator_type &allocator=EASTL_SET_DEFAULT_ALLOCATOR) | |
set (const Compare &compare, const allocator_type &allocator=EASTL_SET_DEFAULT_ALLOCATOR) | |
set (const this_type &x) | |
set (this_type &&x) | |
set (this_type &&x, const allocator_type &allocator) | |
set (std::initializer_list< value_type > ilist, const Compare &compare=Compare(), const allocator_type &allocator=EASTL_SET_DEFAULT_ALLOCATOR) | |
template<typename Iterator > | |
set (Iterator itBegin, Iterator itEnd) | |
this_type & | operator= (const this_type &x) |
this_type & | operator= (std::initializer_list< value_type > ilist) |
this_type & | operator= (this_type &&x) |
value_compare | value_comp () const |
size_type | erase (const Key &k) |
iterator | erase (const_iterator position) |
iterator | erase (const_iterator first, const_iterator last) |
reverse_iterator | erase (const_reverse_iterator position) |
reverse_iterator | erase (const_reverse_iterator first, const_reverse_iterator last) |
size_type | count (const Key &k) const |
eastl::pair< iterator, iterator > | equal_range (const Key &k) |
eastl::pair< const_iterator, const_iterator > | equal_range (const Key &k) const |
iterator | begin () EA_NOEXCEPT |
const_iterator | begin () const EA_NOEXCEPT |
iterator | end () EA_NOEXCEPT |
const_iterator | end () const EA_NOEXCEPT |
iterator | find (const key_type &key) |
const_iterator | find (const key_type &key) const |
iterator | lower_bound (const key_type &key) |
const_iterator | lower_bound (const key_type &key) const |
iterator | upper_bound (const key_type &key) |
const_iterator | upper_bound (const key_type &key) const |
Public Member Functions inherited from eastl::rbtree< Key, Key, eastl::less< Key >, EASTLAllocatorType, eastl::use_self< Key >, false, true > | |
rbtree (const allocator_type &allocator) | |
rbtree (const eastl::less< Key > &compare, const allocator_type &allocator=EASTL_RBTREE_DEFAULT_ALLOCATOR) | |
rbtree (const this_type &x) | |
rbtree (this_type &&x) | |
rbtree (this_type &&x, const allocator_type &allocator) | |
rbtree (InputIterator first, InputIterator last, const eastl::less< Key > &compare, const allocator_type &allocator=EASTL_RBTREE_DEFAULT_ALLOCATOR) | |
rbtree (InputIterator first, InputIterator last, const C &compare, const allocator_type &allocator) | |
const allocator_type & | get_allocator () const EA_NOEXCEPT |
allocator_type & | get_allocator () EA_NOEXCEPT |
void | set_allocator (const allocator_type &allocator) |
const key_compare & | key_comp () const |
key_compare & | key_comp () |
this_type & | operator= (const this_type &x) |
this_type & | operator= (std::initializer_list< value_type > ilist) |
this_type & | operator= (this_type &&x) |
void | swap (this_type &x) |
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 |
reverse_iterator | rbegin () EA_NOEXCEPT |
const_reverse_iterator | rbegin () const EA_NOEXCEPT |
const_reverse_iterator | crbegin () const EA_NOEXCEPT |
reverse_iterator | rend () EA_NOEXCEPT |
const_reverse_iterator | rend () const EA_NOEXCEPT |
const_reverse_iterator | crend () const EA_NOEXCEPT |
bool | empty () const EA_NOEXCEPT |
size_type | size () const EA_NOEXCEPT |
insert_return_type | emplace (Args &&... args) |
iterator | emplace_hint (const_iterator position, Args &&... args) |
eastl::pair< iterator, bool > | try_emplace (const key_type &k, Args &&... args) |
eastl::pair< iterator, bool > | try_emplace (key_type &&k, Args &&... args) |
iterator | try_emplace (const_iterator position, const key_type &k, Args &&... args) |
iterator | try_emplace (const_iterator position, key_type &&k, Args &&... args) |
eastl::pair< typename rbtree< K, V, C, A, E, bM, bU >::iterator, bool > | try_emplace (const key_type &key, Args &&... args) |
eastl::pair< typename rbtree< K, V, C, A, E, bM, bU >::iterator, bool > | try_emplace (key_type &&key, Args &&... args) |
insert_return_type | insert (P &&otherValue) |
iterator | insert (const_iterator hint, value_type &&value) |
insert_return_type | insert (const value_type &value) |
iterator | insert (const_iterator position, const value_type &value) |
void | insert (std::initializer_list< value_type > ilist) |
void | insert (InputIterator first, InputIterator last) |
pair< iterator, bool > | insert_or_assign (const key_type &k, M &&obj) |
pair< iterator, bool > | insert_or_assign (key_type &&k, M &&obj) |
iterator | insert_or_assign (const_iterator hint, const key_type &k, M &&obj) |
iterator | insert_or_assign (const_iterator hint, key_type &&k, M &&obj) |
eastl::pair< typename rbtree< K, V, C, A, E, bM, bU >::iterator, bool > | insert_or_assign (const key_type &k, M &&obj) |
eastl::pair< typename rbtree< K, V, C, A, E, bM, bU >::iterator, bool > | insert_or_assign (key_type &&k, M &&obj) |
iterator | erase (const_iterator position) |
iterator | erase (const_iterator first, const_iterator last) |
reverse_iterator | erase (const_reverse_iterator position) |
reverse_iterator | erase (const_reverse_iterator first, const_reverse_iterator last) |
void | erase (const key_type *first, const key_type *last) |
void | clear () |
void | reset_lose_memory () |
iterator | find (const key_type &key) |
const_iterator | find (const key_type &key) const |
iterator | find_as (const U &u, Compare2 compare2) |
const_iterator | find_as (const U &u, Compare2 compare2) const |
iterator | lower_bound (const key_type &key) |
const_iterator | lower_bound (const key_type &key) const |
iterator | upper_bound (const key_type &key) |
const_iterator | upper_bound (const key_type &key) const |
bool | validate () const |
int | validate_iterator (const_iterator i) const |
eastl::pair< typename rbtree< K, V, C, A, E, bM, bU >::iterator, bool > | DoInsertValue (true_type, Args &&... args) |
Public Member Functions inherited from eastl::rb_base< Key, Value, Compare, ExtractKey, bUniqueKeys, RBTree > | |
rb_base (const Compare &compare) | |
Additional Inherited Members | |
Public Attributes inherited from eastl::rbtree< Key, Key, eastl::less< Key >, EASTLAllocatorType, eastl::use_self< Key >, false, true > | |
rbtree_node_base | mAnchor |
size_type | mnSize |
This node acts as end() and its mpLeft points to begin(), and mpRight points to rbegin() (the last node on the right). | |
allocator_type | mAllocator |
Stores the count of nodes in the tree (not counting the anchor node). | |
Protected Member Functions inherited from eastl::rbtree< Key, Key, eastl::less< Key >, EASTLAllocatorType, eastl::use_self< Key >, false, true > | |
node_type * | DoAllocateNode () |
void | DoFreeNode (node_type *pNode) |
node_type * | DoCreateNodeFromKey (const key_type &key) |
node_type * | DoCreateNode (Args &&... args) |
node_type * | DoCreateNode (const value_type &value) |
node_type * | DoCreateNode (value_type &&value) |
node_type * | DoCreateNode (const node_type *pNodeSource, node_type *pNodeParent) |
node_type * | DoCopySubtree (const node_type *pNodeSource, node_type *pNodeDest) |
void | DoNukeSubtree (node_type *pNode) |
eastl::pair< iterator, bool > | DoInsertValue (true_type, Args &&... args) |
iterator | DoInsertValue (false_type, Args &&... args) |
eastl::pair< iterator, bool > | DoInsertValue (true_type, value_type &&value) |
iterator | DoInsertValue (false_type, value_type &&value) |
iterator | DoInsertValueImpl (node_type *pNodeParent, bool bForceToLeft, const key_type &key, Args &&... args) |
iterator | DoInsertValueImpl (node_type *pNodeParent, bool bForceToLeft, const key_type &key, node_type *pNodeNew) |
eastl::pair< iterator, bool > | DoInsertKey (true_type, const key_type &key) |
iterator | DoInsertKey (false_type, const key_type &key) |
iterator | DoInsertKey (true_type, const_iterator position, const key_type &key) |
iterator | DoInsertKey (false_type, const_iterator position, const key_type &key) |
iterator | DoInsertValueHint (true_type, const_iterator position, Args &&... args) |
iterator | DoInsertValueHint (false_type, const_iterator position, Args &&... args) |
iterator | DoInsertValueHint (true_type, const_iterator position, value_type &&value) |
iterator | DoInsertValueHint (false_type, const_iterator position, value_type &&value) |
iterator | DoInsertKeyImpl (node_type *pNodeParent, bool bForceToLeft, const key_type &key) |
node_type * | DoGetKeyInsertionPositionUniqueKeys (bool &canInsert, const key_type &key) |
node_type * | DoGetKeyInsertionPositionNonuniqueKeys (const key_type &key) |
node_type * | DoGetKeyInsertionPositionUniqueKeysHint (const_iterator position, bool &bForceToLeft, const key_type &key) |
node_type * | DoGetKeyInsertionPositionNonuniqueKeysHint (const_iterator position, bool &bForceToLeft, const key_type &key) |
Protected Member Functions inherited from eastl::rb_base_compare_ebo< Compare, bool > | |
rb_base_compare_ebo (const Compare &compare) | |
Compare & | get_compare () |
const Compare & | get_compare () const |
template<typename T > | |
bool | compare (const T &lhs, const T &rhs) |
template<typename T > | |
bool | compare (const T &lhs, const T &rhs) const |
set
Implements a canonical set.
The large majority of the implementation of this class is found in the rbtree base class. We control the behaviour of rbtree via template parameters.
Note that the 'bMutableIterators' template parameter to rbtree is set to false. This means that set::iterator is const and the same as set::const_iterator. This is by design and it follows the C++ standard defect report recommendation. If the user wants to modify a container element, the user needs to either use mutable data members or use const_cast on the iterator's data member. Both of these solutions are recommended by the C++ standard defect report. To consider: Expose the bMutableIterators template policy here at the set level so the user can have non-const set iterators via a template parameter.
Pool allocation If you want to make a custom memory pool for a set container, your pool needs to contain items of type set::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 set<Widget, less<Widget>, MemoryPool> WidgetSet; // Delare your WidgetSet type. MemoryPool myPool(sizeof(WidgetSet::node_type), 100); // Make a pool of 100 Widget nodes. WidgetSet mySet(&myPool); // Create a map that uses the pool.