Classes | Public Types | Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | Related Functions
ash::hashlist Class Reference

A hashgraph implemented as a list. More...

#include <ash/impl/hashlist.h>

Inheritance diagram for ash::hashlist:
Inheritance graph
[legend]

List of all members.

Classes

struct  const_iterator
 The const type used to iterate through the contents of the container. More...
struct  iterator
 The type used to iterate through the contents of the container. More...

Public Types

typedef Key key_type
 The type used to identify elements.
typedef Value value_type
 The type of the object the container holds.
typedef value_typepointer
 The type that serves as a pointer to value_type.
typedef value_type const * const_pointer
 The type that serves as a const pointer to value_type.
typedef value_typereference
 The type that serves as a reference to value_type.
typedef value_type const & const_reference
 The type that serves as a pointer to value_type.
typedef equal_to< key_typekey_equal
 
typedef KeyAccess key_access
 Functor to access a key_type from a value_type.
typedef HashFx hasher
 The functor type used to hash keys.
typedef list_node< Value > node_type
 
typedef _Base::allocator_type allocator_type
 
typedef _Base::size_type size_type
 The unsigned type used to represent the size of the container.
typedef _Base::difference_type difference_type
 The signed integral type used to represent the distance between iterators.
typedef iterator iterator
 The type used to iterate through the contents of the container.
typedef std::reverse_iterator
< iterator
reverse_iterator
 A reverse_iterator adaptor for an iterator.
typedef const_iterator const_iterator
 The const type used to iterate through the contents of the container.
typedef std::reverse_iterator
< const_iterator
const_reverse_iterator
 A reverse_iterator adaptor for a const_iterator.
typedef _Base::local_iterator local_iterator
 TODO.
typedef _Base::const_local_iterator const_local_iterator
 TODO.
enum  { LINKS_PER_NODE = Node::NUM_LINKS }
typedef pair< iterator, iteratoriterator_pair
 A pair of iterators (convenience).
typedef pair< const_iterator,
const_iterator
const_iterator_pair
 A pair of const_iterators (convenience).

Public Member Functions

size_t memory () const
 Get the container's total memory load.
void swap (hashgraph &hg)
 Swap method.
size_type bucket (key_type const &key) const
 
bool operator== (hashgraph const &hg) const
Constructors/Destructors

We use the default destructor.

 hashlist (size_type n=0, hasher const &h=hasher(), key_equal const &k=key_equal())
 Default constructor.
template<class InputIterator >
 hashlist (InputIterator f, InputIterator const &l, size_type n=0, hasher const &h=hasher(), key_equal const &k=key_equal())
 Iterative constructor.
 hashlist (hashlist const &hl)
 Copy constructor.
hashlistoperator= (hashlist const &hl)
 Assignment operator.
void swap (hashlist &hl)
 Swap method.
Iteration Methods
iterator begin ()
 Get an iterator to the beginning.
const_iterator begin () const
 Get an iterator to the beginning.
iterator end ()
 Get an iterator to the end.
const_iterator end () const
 Get an iterator to the end.
reverse_iterator rbegin ()
 Get an iterator to the reverse beginning.
const_reverse_iterator rbegin () const
 Get an iterator to the reverse beginning.
reverse_iterator rend ()
 Get an iterator to the reverse end.
const_reverse_iterator rend () const
 Get an iterator to the reverse beginning.
Insert/Delete
pair< iterator, bool > insert (iterator pos, const_reference v)
 Insert an element.
template<class InputIterator >
void insert (iterator pos, InputIterator f, InputIterator const &l)
 Range insert.
void erase (iterator pos)
 Erase an element.
void erase (iterator first, iterator const &last)
 Erase a range of elements.
pair< iterator, bool > push_front (const_reference v)
 Insert an element at the front of the container.
pair< iterator, bool > push_back (const_reference v)
 Insert an object at the back of the container.
void pop_front ()
 Erase the element at the front of the container.
void pop_back ()
 Erase the element at the back of the container.
Lookup Methods
iterator find (key_type const &key)
 Find an element.
const_iterator find (key_type const &key) const
 Find an element.
pair< iterator, iteratorequal_range (key_type const &k)
 Find all elements matching a given key.
pair< const_iterator,
const_iterator
equal_range (key_type const &k) const
 Find all elements matching a given key.
reference front ()
 Get the first element.
const_reference front () const
 Get the first element.
reference back ()
 
const_reference back () const
 
Iterator Functions
local_iterator begin (size_type i)
 
const_local_iterator begin (size_type i) const
 
local_iterator end (size_type i)
 
const_local_iterator end (size_type i) const
 
Size Functions
size_type size () const
 Get the size of the container.
size_type max_size () const
 Get the maximum size of the container.
size_t dynamic_memory () const
 Get the container's dynamic memory load.
bool empty () const
 Check if the container is empty.
size_type bucket_count () const
 Get the number of buckets the container has.
void resize (size_type n)
 Resize the container to hold at least n elements.
void rehash (size_type n)
 
Accessor Methods
hasher hash_funct () const
 Get the hash functor used by the container.
hasher hash_function () const
 Get the hash functor used by the container.
key_equal key_eq () const
 Get the key comparison functor used by the container.
Lookup
size_type count (key_type const &k) const
 Count the number of elements with a given key.
Hash Container Functions
float load_factor () const
 
float max_load_factor () const
 
float max_load_factor (size_type new_grow)
 
float min_load_factor () const
 Get the min load factor.
float min_load_factor (size_type new_shrink)
 Set the min load factor.

Protected Types

typedef node< 2 > node_base
typedef list_iterator
< hashlist, trivial
iterator_base
typedef list_iterator
< hashlist, add_const
const_iterator_base
typedef f_access_node< Node,
KeyAccess > 
node_key_access
 Functor to get/set the key of a node (wrapper for key_access).
typedef table_node_allocator
< allocator_type
hashtable_allocator
 The hashtable's allocator.
typedef Ht< node_type,
key_type, hasher,
node_key_access, key_equal,
hashtable_allocator
hashtable_type
 The hashtable used as a backend.
typedef hashtable_type::iterator _Ht_iterator
 The hashtable's iterator - we'll wrap it with our own.
typedef
hashtable_type::const_iterator 
_Ht_const_iterator
 The hashtable's const_iterator - we'll wrap it with our own.
typedef pair< _Ht_iterator,
_Ht_iterator
_Ht_iterator_pair
 A pair of the hashtable's iterators (convenience).
typedef pair
< _Ht_const_iterator,
_Ht_const_iterator
_Ht_const_iterator_pair
 A pair of the hashtable's const_iterators (convenience).
typedef graph_navigator
< hashgraph, iterator_base,
trivial
navigator_base
typedef graph_navigator
< hashgraph,
const_iterator_base, add_const
const_navigator_base

Protected Member Functions

void _link (node_base *pos, node_base *new_node)
pair< iterator, bool > _insert (key_type const &key, const_reference v)
pair< iterator, bool > _insert_end (const_reference v)
pair< iterator, bool > _insert_begin (const_reference v)
pair< iterator, bool > _insert_rbegin (const_reference v)
void _move (node_base *pos, node_base *node)

Protected Attributes

node_base _self
key_access access_key
hashtable_type _M_Ht

Related Functions

(Note that these are not member functions.)

template<typename V , typename K , class HF , class KA , class EK , class A , _ASH_HT_IMPL HT>
void swap (hashlist< V, K, HF, KA, EK, A, HT > &x, hashlist< V, K, HF, KA, EK, A, HT > &y)
 Global swap.
template<class N , typename K , class HF , class KA , class EK , class A , _ASH_HT_IMPL HT>
void swap (hashgraph< N, K, HF, KA, EK, A, HT > &x, hashgraph< N, K, HF, KA, EK, A, HT > &y)
 Global swap.

Insert/Delete

size_type erase (key_type const &k)
 Erase an element.
void clear ()
 Erase all elements.
pair< iterator, bool > insert (const_reference v)
 Insert an element into the container.

Order Methods

void reverse ()
 Reverse the order of elements.
template<class BinaryPredicate >
void sort (BinaryPredicate comp)
 Sort elements according to comp.
void sort ()
 Sort elements according to operator<.

Detailed Description

A hashgraph implemented as a list.

Concepts:
ash::hash_list
Template Parameters:
ValueThe type of value stored in the container. Also defined as hashlist::value_type.
KeyThe key type associated with values. Also defined as hashlist::key_type.
HashFxThe hash functor.
KeyAccessA functor to get/set the Key of a Value.
EqualKeyFunctor to test keys for equality.
AllocThe allocator type. Also defined as hashlist::allocator_type.
HtThe hashtable type to use as a backend.

A hashlist provides the arbitrary ordering of a List with the constant-time lookups of a Unique Hashed Associative Container .


Member Typedef Documentation

typedef hashtable_type::const_iterator ash::hashgraph::_Ht_const_iterator [protected, inherited]

The hashtable's const_iterator - we'll wrap it with our own.

A pair of the hashtable's const_iterators (convenience).

typedef hashtable_type::iterator ash::hashgraph::_Ht_iterator [protected, inherited]

The hashtable's iterator - we'll wrap it with our own.

typedef pair<_Ht_iterator, _Ht_iterator> ash::hashgraph::_Ht_iterator_pair [protected, inherited]

A pair of the hashtable's iterators (convenience).



Concept: stl::container

Reimplemented from ash::hashgraph.

The const type used to iterate through the contents of the container.



Concept: stl::reversible_container

Reimplemented from ash::hashgraph.

Reimplemented in ash::dense_hashlist< Key, Data, HashFx, EqualKey, Alloc >, and ash::sparse_hashlist< Key, Data, HashFx, EqualKey, Alloc >.

A pair of const_iterators (convenience).

Reimplemented in ash::hashgrid.

The type that serves as a const pointer to value_type.



Concept: stl::container

Reimplemented from ash::hashgraph.

Reimplemented in ash::dense_hashlist< Key, Data, HashFx, EqualKey, Alloc >, and ash::sparse_hashlist< Key, Data, HashFx, EqualKey, Alloc >.

The type that serves as a pointer to value_type.



Concept: stl::container

Reimplemented from ash::hashgraph.

Reimplemented in ash::dense_hashlist< Key, Data, HashFx, EqualKey, Alloc >, and ash::sparse_hashlist< Key, Data, HashFx, EqualKey, Alloc >.

typedef std::reverse_iterator<const_iterator> ash::hashlist::const_reverse_iterator

The signed integral type used to represent the distance between iterators.



Concept: stl::container

Reimplemented from ash::hashgraph.

Reimplemented in ash::dense_hashlist< Key, Data, HashFx, EqualKey, Alloc >, and ash::sparse_hashlist< Key, Data, HashFx, EqualKey, Alloc >.

typedef HashFx ash::hashlist::hasher
typedef table_node_allocator<allocator_type> ash::hashgraph::hashtable_allocator [protected, inherited]

The hashtable's allocator.

The type used to iterate through the contents of the container.



Concept: stl::reversible_container

Reimplemented from ash::hashgraph.

Reimplemented in ash::dense_hashlist< Key, Data, HashFx, EqualKey, Alloc >, and ash::sparse_hashlist< Key, Data, HashFx, EqualKey, Alloc >.

typedef pair<iterator, iterator> ash::hashgraph::iterator_pair [inherited]

A pair of iterators (convenience).

Reimplemented in ash::hashgrid.

typedef KeyAccess ash::hashlist::key_access

Functor to access a key_type from a value_type.

Reimplemented from ash::hashgraph.

Reimplemented in ash::dense_hashlist< Key, Data, HashFx, EqualKey, Alloc >, and ash::sparse_hashlist< Key, Data, HashFx, EqualKey, Alloc >.

typedef f_access_node<Node, KeyAccess> ash::hashgraph::node_key_access [protected, inherited]

Functor to get/set the key of a node (wrapper for key_access).

typedef list_node<Value> ash::hashlist::node_type

The type that serves as a pointer to value_type.



Concept: stl::container

Reimplemented from ash::hashgraph.

Reimplemented in ash::dense_hashlist< Key, Data, HashFx, EqualKey, Alloc >, and ash::sparse_hashlist< Key, Data, HashFx, EqualKey, Alloc >.

The type that serves as a reference to value_type.



Concept: stl::container

Reimplemented from ash::hashgraph.

Reimplemented in ash::dense_hashlist< Key, Data, HashFx, EqualKey, Alloc >, and ash::sparse_hashlist< Key, Data, HashFx, EqualKey, Alloc >.

typedef std::reverse_iterator<iterator> ash::hashlist::reverse_iterator

The unsigned type used to represent the size of the container.



Concept: stl::container

Reimplemented from ash::hashgraph.

Reimplemented in ash::dense_hashlist< Key, Data, HashFx, EqualKey, Alloc >, and ash::sparse_hashlist< Key, Data, HashFx, EqualKey, Alloc >.

The type of the object the container holds.

Must be Assignable .

Concept: stl::container

Reimplemented from ash::hashgraph.

Reimplemented in ash::dense_hashlist< Key, Data, HashFx, EqualKey, Alloc >, and ash::sparse_hashlist< Key, Data, HashFx, EqualKey, Alloc >.


Constructor & Destructor Documentation

ash::hashlist::hashlist ( size_type  n = 0,
hasher const &  h = hasher(),
key_equal const &  k = key_equal() 
) [inline, explicit]

Default constructor.

Parameters:
nThe number of expected elements.
hThe hasher object to copy, if any.
kThe key_equal object to copy, if any.
template<class InputIterator >
ash::hashlist::hashlist ( InputIterator  f,
InputIterator const &  l,
size_type  n = 0,
hasher const &  h = hasher(),
key_equal const &  k = key_equal() 
) [inline]

Iterative constructor.

Parameters:
fThe beginning of the range to copy.
lThe end of the range to copy.
nThe number of expected elements.
hThe hasher object to copy, if any.
kThe key_equal object to copy, if any.
ash::hashlist::hashlist ( hashlist const &  hl) [inline]

Copy constructor.


Member Function Documentation



Concept: stl::sequence



Concept: stl::sequence

Get an iterator to the beginning.

Returns:
An iterator to the beginning of the container.


Concept: stl::container

Reimplemented from ash::hashgraph.

Get an iterator to the beginning.

Returns:
A const_iterator to the beginning of the container.


Concept: stl::container

Reimplemented from ash::hashgraph.

local_iterator ash::hashgraph::begin ( size_type  i) [inline, inherited]
const_local_iterator ash::hashgraph::begin ( size_type  i) const [inline, inherited]
size_type ash::hashgraph::bucket ( key_type const &  key) const [inline, inherited]
size_type ash::hashgraph::bucket_count ( ) const [inline, inherited]

Get the number of buckets the container has.

Returns:
The number of currently-allocated buckets.


Concept: stl::hashed_associative_container

void ash::hashgraph::clear ( ) [inline, inherited]

Erase all elements.



Concept: stl::associative_container

size_type ash::hashgraph::count ( key_type const &  k) const [inline, inherited]

Count the number of elements with a given key.

Parameters:
keyThe key to search for.
Returns:
The number of elements matching key. Because this is a Unique Associative Container , the return value will be 0 or 1.


Concept: stl::unique_associative_container

size_t ash::hashgraph::dynamic_memory ( ) const [inline, inherited]

Get the container's dynamic memory load.

Returns:
The amount of dynamic memory used by the container in bytes.
bool ash::hashgraph::empty ( ) const [inline, inherited]

Check if the container is empty.

Returns:
True if the container is empty.


Concept: stl::container

Get an iterator to the end.

Returns:
An iterator to the end of the container.


Concept: stl::container

Reimplemented from ash::hashgraph.

const_iterator ash::hashlist::end ( ) const [inline]

Get an iterator to the end.

Returns:
A const_iterator to the end of the container.


Concept: stl::container

Reimplemented from ash::hashgraph.

local_iterator ash::hashgraph::end ( size_type  i) [inline, inherited]
const_local_iterator ash::hashgraph::end ( size_type  i) const [inline, inherited]
pair<iterator, iterator> ash::hashlist::equal_range ( key_type const &  k) [inline]

Find all elements matching a given key.

Parameters:
keyThe key to search for.
Returns:
A pair of iterators for the range of elements [first,second). Because this is a Unique Associative Container , the first iterator points to the element, or to the end() if not found. The second iterator points to 1 past the first, or to the end().


Concept: stl::unique_associative_container

Reimplemented from ash::hashgraph.

Find all elements matching a given key.

Parameters:
keyThe key to search for.
Returns:
A pair of const_iterators for the range of elements [first,second). Because this is a Unique Associative Container , the first const_iterator points to the element, or to the end() if not found. The second const_iterator points to 1 past the first, or to the end().


Concept: stl::unique_associative_container

Reimplemented from ash::hashgraph.

void ash::hashlist::erase ( iterator  pos) [inline]

Erase an element.

Parameters:
itrAn iterator pointing to the element to erase.


Concept: stl::associative_container

Reimplemented from ash::hashgraph.

void ash::hashlist::erase ( iterator  first,
iterator const &  last 
) [inline]

Erase a range of elements.

Parameters:
fThe beginning of the range to erase.
lThe end of the range to erase.


Concept: stl::associative_container

Reimplemented from ash::hashgraph.

size_type ash::hashgraph::erase ( key_type const &  k) [inline, inherited]

Erase an element.

Parameters:
keyThe key of the element to erase.
Returns:
The number of erased elements.


Concept: stl::associative_container

iterator ash::hashlist::find ( key_type const &  key) [inline]

Find an element.

Parameters:
keyThe key of the element to search for.
Returns:
An iterator to the element, or to the end() if not found.


Concept: stl::associative_container

Reimplemented from ash::hashgraph.

const_iterator ash::hashlist::find ( key_type const &  key) const [inline]

Find an element.

Parameters:
keyThe key of the element to search for.
Returns:
A const_iterator to the element, or to the end() if not found.


Concept: stl::associative_container

Reimplemented from ash::hashgraph.

Get the first element.

Returns:
A reference to the first element in the container.


Concept: stl::sequence

Get the first element.

Returns:
A const_reference to the first element in the container.


Concept: stl::sequence

hasher ash::hashgraph::hash_funct ( ) const [inline, inherited]

Get the hash functor used by the container.

Returns:
A copy of the container's hasher object.


Concept: stl::hashed_associative_container

hasher ash::hashgraph::hash_function ( ) const [inline, inherited]

Get the hash functor used by the container.

Returns:
A copy of the container's hasher object.


Concept: tr1::unordered_associative_container

pair<iterator, bool> ash::hashlist::insert ( iterator  pos,
const_reference  v 
) [inline]

Insert an element.

Parameters:
pAn iterator to the element after the location to insert.
vThe object to insert.
Returns:
An iterator and a bool. The iterator points to the inserted element, or to another with the same key if one is already in the container. The bool is true if the element was inserted, and false in the case of a duplicate key.


Concept: ash::hash_list

template<class InputIterator >
void ash::hashlist::insert ( iterator  pos,
InputIterator  f,
InputIterator const &  l 
) [inline]

Range insert.

Parameters:
pAn iterator to the element after the location to insert.
fThe beginning of the range to insert.
tThe end of the range to insert.


Concept: stl::sequence

pair<iterator, bool> ash::hashgraph::insert ( const_reference  v) [inline, protected, inherited]

Insert an element into the container.

Parameters:
objThe element to insert.
Returns:
An iterator and a bool. The iterator points to the inserted element, or to another with the same key if one is already in the container. The bool is true if the element was inserted, and false in the case of a duplicate key.


Concept: stl::unique_associative_container

Note:
Does not link the newly inserted node.

Reimplemented in ash::hashgrid.

key_equal ash::hashgraph::key_eq ( ) const [inline, inherited]

Get the key comparison functor used by the container.

Returns:
A copy of the container's key_equal object.


Concept: stl::hashed_associative_container

float ash::hashgraph::load_factor ( ) const [inline, inherited]
float ash::hashgraph::max_load_factor ( ) const [inline, inherited]
float ash::hashgraph::max_load_factor ( size_type  new_grow) [inline, inherited]
size_type ash::hashgraph::max_size ( ) const [inline, inherited]

Get the maximum size of the container.

Returns:
The maximum number of elements the container can hold.


Concept: stl::container

size_t ash::hashlist::memory ( ) const [inline]

Get the container's total memory load.

Returns:
The amount of memory used by the container in bytes.

Reimplemented from ash::hashgraph.

float ash::hashgraph::min_load_factor ( ) const [inline, inherited]

Get the min load factor.

Returns:
The min load factor before the container shrinks.
float ash::hashgraph::min_load_factor ( size_type  new_shrink) [inline, inherited]

Set the min load factor.

Parameters:
new_shrinkThe min load factor before the container shrinks.
hashlist& ash::hashlist::operator= ( hashlist const &  hl) [inline]

Assignment operator.

void ash::hashlist::pop_back ( ) [inline]

Erase the element at the back of the container.



Concept: stl::back_insertion_sequence

void ash::hashlist::pop_front ( ) [inline]

Erase the element at the front of the container.



Concept: stl::front_insertion_sequence

pair<iterator, bool> ash::hashlist::push_back ( const_reference  v) [inline]

Insert an object at the back of the container.

Parameters:
vThe object to insert.


Concept: ash::hash_list

pair<iterator, bool> ash::hashlist::push_front ( const_reference  v) [inline]

Insert an element at the front of the container.

Parameters:
vThe object to insert.
Returns:
An iterator and a bool. The iterator points to the inserted element, or to another with the same key if one is already in the container. The bool is true if the element was inserted, and false in the case of a duplicate key.


Concept: ash::hash_list

Get an iterator to the reverse beginning.

Returns:
A reverse_iterator pointing to the beginning of the reversed container.


Concept: stl::reversible_container

Get an iterator to the reverse beginning.

Returns:
A const_reverse_iterator pointing to the beginning of the reversed container.


Concept: stl::reversible_container

void ash::hashgraph::rehash ( size_type  n) [inline, inherited]

Get an iterator to the reverse end.

Returns:
A reverse_iterator pointing to the end of the reversed container.


Concept: stl::reversible_container

Get an iterator to the reverse beginning.

Returns:
A const_reverse_iterator pointing to the beginning of the reversed container.


Concept: stl::reversible_container

void ash::hashgraph::resize ( size_type  n) [inline, inherited]

Resize the container to hold at least n elements.

Parameters:
nThe number of elements the container is expected to hold.


Concept: stl::hashed_associative_container

void ash::hashlist::reverse ( ) [inline]

Reverse the order of elements.



Concept: stl::list

size_type ash::hashgraph::size ( ) const [inline, inherited]

Get the size of the container.

Returns:
The number of elements in the container.


Concept: stl::container

template<class BinaryPredicate >
void ash::hashlist::sort ( BinaryPredicate  comp) [inline]

Sort elements according to comp.

Parameters:
compThe comparison functor.


Concept: stl::list

void ash::hashlist::sort ( ) [inline]

Sort elements according to operator<.



Concept: stl::list

void ash::hashlist::swap ( hashlist hl) [inline]

Swap method.



Concept: stl::container

void ash::hashgraph::swap ( hashgraph hg) [inline, inherited]

Swap method.



Concept: stl::container


The documentation for this class was generated from the following file:


© 2012   AshTL
Licensed under  AGPLv3
Hosted by  Get AshTL at SourceForge.net. Fast, secure and Free Open Source software downloads
Generated by  doxygen 1.7.4