aGrUM 3.1.1
a C++ library for (probabilistic) graphical models
HashTableIterator< Key, Val > Class Template Reference

Unsafe Iterators for hashtables. More...

#include <agrum/base/core/hashTable.h>

Inheritance diagram for HashTableIterator< Key, Val >:
Collaboration diagram for HashTableIterator< Key, Val >:

Public Types

using iterator_category = std::forward_iterator_tag
 types for STL compliance
using key_type = Key
 types for STL compliance
using mapped_type = Val
 types for STL compliance
using value_type = std::pair< const Key, Val >
 types for STL compliance
using reference = value_type&
 types for STL compliance
using const_reference = const value_type&
 types for STL compliance
using pointer = value_type*
 types for STL compliance
using const_pointer = const value_type*
 types for STL compliance
using difference_type = std::ptrdiff_t
 types for STL compliance

Public Member Functions

mapped_typeval ()
 Returns the mapped value pointed to by the iterator.
Constructors / Destructors
 HashTableIterator () noexcept
 Basic constructor: creates an iterator pointing to nothing.
 HashTableIterator (const HashTable< Key, Val > &tab) noexcept
 Constructor for an iterator pointing to the first element of a hashtable.
 HashTableIterator (const HashTable< Key, Val > &tab, Size ind_elt)
 Constructor for an iterator pointing to the nth element of a hashtable.
 HashTableIterator (const HashTableIterator< Key, Val > &from) noexcept
 Copy constructor.
 HashTableIterator (HashTableIterator< Key, Val > &&from) noexcept
 Move constructor.
 ~HashTableIterator () noexcept
 Class destructor.
Operators
HashTableIterator< Key, Val > & operator= (const HashTableIterator< Key, Val > &from) noexcept
 Copy operator.
HashTableIterator< Key, Val > & operator= (HashTableIterator< Key, Val > &&from) noexcept
 Move operator.
HashTableIterator< Key, Val > & operator++ () noexcept
 Makes the iterator point to the next element in the hash table.
HashTableIterator< Key, Val > & operator+= (Size i) noexcept
 Makes the iterator point to i elements further in the hashtable.
HashTableIterator< Key, Val > operator+ (Size i) const noexcept
 Returns a new iterator.
bool operator== (const HashTableIterator< Key, Val > &from) const noexcept
 Checks whether two iterators are pointing toward equal elements.
value_typeoperator* ()
 Returns the value pointed to by the iterator.
const value_typeoperator* () const
 Returns the value pointed to by the iterator.
Accessors / Modifiers
const key_typekey () const
 Returns the key corresponding to the element pointed to by the iterator.
const mapped_typeval () const
 Returns the mapped value pointed to by the iterator.
void clear () noexcept
 Makes the iterator point toward nothing (in particular, it is not related anymore to its current hash table).
Operators
bool operator== (const HashTableConstIterator< Key, Val > &from) const noexcept
 Checks whether two iterators are pointing toward equal elements.

Protected Member Functions

HashTable< Key, Val >::Bucket * _getBucket_ () const noexcept
 Returns the current iterator's bucket.
Size _getIndex_ () const noexcept
 Returns the index in the hashtable's node vector pointed to by the iterator.

Protected Attributes

const HashTable< Key, Val > * _table_ {nullptr}
 The hash table the iterator is pointing to.
Size _index_ {Size(0)}
 The index of the chained list pointed by the iterator in the array of nodes of the hash table.
HashTable< Key, Val >::Bucket * _bucket_ {nullptr}
 The bucket in the chained list pointed to by the iterator.

Detailed Description

template<typename Key, typename Val>
class HashTableIterator< Key, Val >

Unsafe Iterators for hashtables.

HashTableIterator provides a fast but unsafe way to parse HashTables. They should only be used when parsing hashtables in which no element is removed from the hashtable. Removing an element where the iterator points to will mess the iterator as it will most certainly point to an unallocated memory. So, this kind of iterator should only be used when parsing "(key) constant" hash tables, e.g., when we wish to display the content of a hash table or when we wish to update the mapped values of some elements of the hash table without ever modifying their keys.

Developers may consider using HashTable<x,y>::iterator instead of HashTableIterator<x,y>.

Usage example:
// creation of a hash table with 10 elements
HashTable<int,string> table;
for (int i = 0; i< 10; ++i)
table.insert (i,"xxx" + string (i,'x'));
// parse the hash table
for (HashTable<int,string>::iterator iter = table.begin ();
iter != table.end (); ++iter) {
// display the values
cerr << "at " << iter.key() << " value = " << iter.val () << endl;
HashTable<int,string>::value_type& elt = *iter;
std::pair<const int, string>& xelt = *iter;
}
// check whether two iterators point toward the same element
HashTable<int,string>::iterator iter1 = table1.begin();
HashTable<int,string>::iterator iter2 = table1.end();
if (iter1 != iter) {
cerr << "iter1 and iter2 point toward different elements";
}
// make iter1 point toward nothing
iter1.clear ();
Template Parameters
KeyThe gum::HashTable key.
ValThe gum::HashTable Value.

Definition at line 2465 of file hashTable.h.

Member Typedef Documentation

◆ const_pointer

template<typename Key, typename Val>
using HashTableIterator< Key, Val >::const_pointer = const value_type*

types for STL compliance

Definition at line 2476 of file hashTable.h.

◆ const_reference

template<typename Key, typename Val>
using HashTableIterator< Key, Val >::const_reference = const value_type&

types for STL compliance

Definition at line 2474 of file hashTable.h.

◆ difference_type

template<typename Key, typename Val>
using HashTableIterator< Key, Val >::difference_type = std::ptrdiff_t

types for STL compliance

Definition at line 2477 of file hashTable.h.

◆ iterator_category

template<typename Key, typename Val>
using HashTableIterator< Key, Val >::iterator_category = std::forward_iterator_tag

types for STL compliance

Definition at line 2469 of file hashTable.h.

◆ key_type

template<typename Key, typename Val>
using HashTableIterator< Key, Val >::key_type = Key

types for STL compliance

Definition at line 2470 of file hashTable.h.

◆ mapped_type

template<typename Key, typename Val>
using HashTableIterator< Key, Val >::mapped_type = Val

types for STL compliance

Definition at line 2471 of file hashTable.h.

◆ pointer

template<typename Key, typename Val>
using HashTableIterator< Key, Val >::pointer = value_type*

types for STL compliance

Definition at line 2475 of file hashTable.h.

◆ reference

template<typename Key, typename Val>
using HashTableIterator< Key, Val >::reference = value_type&

types for STL compliance

Definition at line 2473 of file hashTable.h.

◆ value_type

template<typename Key, typename Val>
using HashTableIterator< Key, Val >::value_type = std::pair< const Key, Val >

types for STL compliance

Definition at line 2472 of file hashTable.h.

Constructor & Destructor Documentation

◆ HashTableIterator() [1/5]

template<typename Key, typename Val>
HashTableIterator< Key, Val >::HashTableIterator ( )
explicitnoexcept

Basic constructor: creates an iterator pointing to nothing.

Definition at line 1917 of file hashTable_tpl.h.

1917 :
1920 }
Unsafe Iterators for hashtables.
Definition hashTable.h:2465
HashTableIterator() noexcept
Basic constructor: creates an iterator pointing to nothing.

References HashTableConstIterator< Key, Val >::HashTableConstIterator(), and HashTableIterator().

Referenced by HashTableIterator(), HashTableIterator(), HashTableIterator(), HashTableIterator(), HashTableIterator(), ~HashTableIterator(), operator+(), operator++(), operator+=(), operator=(), operator=(), and operator==().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ HashTableIterator() [2/5]

template<typename Key, typename Val>
HashTableIterator< Key, Val >::HashTableIterator ( const HashTable< Key, Val > & tab)
explicitnoexcept

Constructor for an iterator pointing to the first element of a hashtable.

Parameters
tabThe gum::HashTable to iterate over.

Definition at line 1923 of file hashTable_tpl.h.

References HashTableConstIterator< Key, Val >::HashTableConstIterator(), HashTableIterator(), and HashTableConstIterator< Key, Val >::HashTable< Key, Val >.

Here is the call graph for this function:

◆ HashTableIterator() [3/5]

template<typename Key, typename Val>
HashTableIterator< Key, Val >::HashTableIterator ( const HashTable< Key, Val > & tab,
Size ind_elt )

Constructor for an iterator pointing to the nth element of a hashtable.

The method runs in time linear to ind_elt.

Parameters
tabThe hash table to which the so-called element belongs.
ind_eltThe position of the element in the hash table (0 means the first element).
Exceptions
UndefinedIteratorValueRaised if the element cannot be found.

Definition at line 1929 of file hashTable_tpl.h.

References HashTableConstIterator< Key, Val >::HashTableConstIterator(), HashTableIterator(), and HashTableConstIterator< Key, Val >::HashTable< Key, Val >.

Here is the call graph for this function:

◆ HashTableIterator() [4/5]

template<typename Key, typename Val>
HashTableIterator< Key, Val >::HashTableIterator ( const HashTableIterator< Key, Val > & from)
noexcept

Copy constructor.

Parameters
fromThe gum::HashTableIterator to copy.

Definition at line 1935 of file hashTable_tpl.h.

References HashTableConstIterator< Key, Val >::HashTableConstIterator(), and HashTableIterator().

Here is the call graph for this function:

◆ HashTableIterator() [5/5]

template<typename Key, typename Val>
HashTableIterator< Key, Val >::HashTableIterator ( HashTableIterator< Key, Val > && from)
noexcept

Move constructor.

Parameters
fromThe gum::HashTableIterator to move.

Definition at line 1942 of file hashTable_tpl.h.

References HashTableConstIterator< Key, Val >::HashTableConstIterator(), and HashTableIterator().

Here is the call graph for this function:

◆ ~HashTableIterator()

template<typename Key, typename Val>
HashTableIterator< Key, Val >::~HashTableIterator ( )
noexcept

Class destructor.

Definition at line 1948 of file hashTable_tpl.h.

1948 {
1950 }

References HashTableIterator().

Here is the call graph for this function:

Member Function Documentation

◆ _getBucket_()

template<typename Key, typename Val>
HashTable< Key, Val >::Bucket * HashTableConstIterator< Key, Val >::_getBucket_ ( ) const
nodiscardprotectednoexceptinherited

Returns the current iterator's bucket.

Returns
Returns the current iterator's bucket.

Definition at line 1903 of file hashTable_tpl.h.

1903 {
1904 return _bucket_;
1905 }
HashTable< Key, Val >::Bucket * _bucket_
The bucket in the chained list pointed to by the iterator.
Definition hashTable.h:2396

References _bucket_.

◆ _getIndex_()

template<typename Key, typename Val>
Size HashTableConstIterator< Key, Val >::_getIndex_ ( ) const
nodiscardprotectednoexceptinherited

Returns the index in the hashtable's node vector pointed to by the iterator.

Returns
Returns the index in the hashtable's node vector pointed to by the iterator.

Definition at line 1908 of file hashTable_tpl.h.

1908 {
1909 return _index_;
1910 }
Size _index_
The index of the chained list pointed by the iterator in the array of nodes of the hash table.
Definition hashTable.h:2393

References _index_.

◆ clear()

template<typename Key, typename Val>
void HashTableConstIterator< Key, Val >::clear ( )
noexceptinherited

Makes the iterator point toward nothing (in particular, it is not related anymore to its current hash table).

Definition at line 1799 of file hashTable_tpl.h.

1799 {
1800 _table_ = nullptr;
1801 _bucket_ = nullptr;
1802 _index_ = 0;
1803 }
const HashTable< Key, Val > * _table_
The hash table the iterator is pointing to.
Definition hashTable.h:2387

References _bucket_, _index_, and _table_.

◆ key()

template<typename Key, typename Val>
const HashTableConstIterator< Key, Val >::key_type & HashTableConstIterator< Key, Val >::key ( ) const
nodiscardinherited

Returns the key corresponding to the element pointed to by the iterator.

Warning
Using this method on an iterator that points to an element that has been deleted will most certainly result in a segfault. If unsure, use a safe iterator instead of an unsafe one.
Returns
Returns the key corresponding to the element pointed to by the iterator.

Definition at line 1786 of file hashTable_tpl.h.

1786 {
1787 if (_bucket_) return _bucket_->pair.first;
1788 else { GUM_ERROR(UndefinedIteratorValue, "Accessing a nullptr object") }
1789 }
Unsafe Const Iterators for hashtables.
Definition hashTable.h:2191
#define GUM_ERROR(type, msg)
Definition exceptions.h:76

References _bucket_, and GUM_ERROR.

◆ operator*() [1/2]

template<typename Key, typename Val>
HashTableIterator< Key, Val >::value_type & HashTableIterator< Key, Val >::operator* ( )

Returns the value pointed to by the iterator.

Warning
using this method on an iterator that points to an element that has been deleted will most certainly result in a segfault. If unsure, use a safe iterator instead of an unsafe one.
Returns
Returns the value pointed to by the iterator.

Definition at line 1998 of file hashTable_tpl.h.

1998 {
2000 }
const value_type & operator*() const
Returns the value pointed to by the iterator.
std::pair< const Key, Val > value_type
types for STL compliance
Definition hashTable.h:2472

References HashTableConstIterator< Key, Val >::operator*().

Here is the call graph for this function:

◆ operator*() [2/2]

template<typename Key, typename Val>
const HashTableIterator< Key, Val >::value_type & HashTableIterator< Key, Val >::operator* ( ) const

Returns the value pointed to by the iterator.

Warning
using this method on an iterator that points to an element that has been deleted will most certainly result in a segfault. If unsure, use a safe iterator instead of an unsafe one.
Returns
Returns the value pointed to by the iterator.

Definition at line 2004 of file hashTable_tpl.h.

2004 {
2006 }

References HashTableConstIterator< Key, Val >::operator*().

Here is the call graph for this function:

◆ operator+()

template<typename Key, typename Val>
HashTableIterator< Key, Val > HashTableIterator< Key, Val >::operator+ ( Size i) const
noexcept

Returns a new iterator.

Parameters
iThe number of increments.
Returns
Returns this gum::HashTableIterator.

Definition at line 1985 of file hashTable_tpl.h.

1985 {
1987 iter += nb;
1988 return iter;
1989 }

References HashTableIterator().

Here is the call graph for this function:

◆ operator++()

template<typename Key, typename Val>
HashTableIterator< Key, Val > & HashTableIterator< Key, Val >::operator++ ( )
noexcept

Makes the iterator point to the next element in the hash table.

for (iter = begin(); iter != end(); ++iter) { }

The above loop is guaranteed to parse the whole hash table as long as no element is added to or deleted from the hash table while being in the loop.

Warning
performing a ++ on an iterator that points to an element that has been deleted will most certainly result in a segfault.
Returns
Returns this gum::HashTableIterator.

Definition at line 1973 of file hashTable_tpl.h.

1973 {
1975 return *this;
1976 }
HashTableConstIterator< Key, Val > & operator++() noexcept
Makes the iterator point to the next element in the hash table.

References HashTableIterator(), and HashTableConstIterator< Key, Val >::operator++().

Here is the call graph for this function:

◆ operator+=()

template<typename Key, typename Val>
HashTableIterator< Key, Val > & HashTableIterator< Key, Val >::operator+= ( Size i)
noexcept

Makes the iterator point to i elements further in the hashtable.

Parameters
iThe number of increments.
Returns
Returns this gum::HashTableIterator.

Definition at line 1979 of file hashTable_tpl.h.

1979 {
1981 return *this;
1982 }
HashTableConstIterator< Key, Val > & operator+=(Size i) noexcept
Makes the iterator point to i elements further in the hashtable.

References HashTableIterator(), and HashTableConstIterator< Key, Val >::operator+=().

Here is the call graph for this function:

◆ operator=() [1/2]

template<typename Key, typename Val>
HashTableIterator< Key, Val > & HashTableIterator< Key, Val >::operator= ( const HashTableIterator< Key, Val > & from)
noexcept

Copy operator.

Parameters
fromThe gum::HashTableIterator to copy.
Returns
Returns this gum::HashTableIterator.

Definition at line 1960 of file hashTable_tpl.h.

1960 {
1962 return *this;
1963 }
HashTableConstIterator< Key, Val > & operator=(const HashTableConstIterator< Key, Val > &from) noexcept
Copy operator.

References HashTableIterator(), and HashTableConstIterator< Key, Val >::operator=().

Here is the call graph for this function:

◆ operator=() [2/2]

template<typename Key, typename Val>
HashTableIterator< Key, Val > & HashTableIterator< Key, Val >::operator= ( HashTableIterator< Key, Val > && from)
noexcept

Move operator.

Parameters
fromThe gum::HashTableIterator to move.
Returns
Returns this gum::HashTableIterator.

Definition at line 1967 of file hashTable_tpl.h.

1967 {
1969 return *this;
1970 }

References HashTableIterator(), and HashTableConstIterator< Key, Val >::operator=().

Here is the call graph for this function:

◆ operator==() [1/2]

template<typename Key, typename Val>
bool HashTableConstIterator< Key, Val >::operator== ( const HashTableConstIterator< Key, Val > & from) const
noexceptinherited

Checks whether two iterators are pointing toward equal elements.

Parameters
fromThe gum::HashTableConstIterator to test for equality.
Returns
Returns true if this and from are equal.

Definition at line 1889 of file hashTable_tpl.h.

1890 {
1891 return (_bucket_ == from._bucket_);
1892 }

Referenced by HashTableIterator< Key, Val >::operator==().

Here is the caller graph for this function:

◆ operator==() [2/2]

template<typename Key, typename Val>
bool HashTableIterator< Key, Val >::operator== ( const HashTableIterator< Key, Val > & from) const
noexcept

Checks whether two iterators are pointing toward equal elements.

Parameters
fromThe gum::HashTableIterator to test for equality.
Returns
Returns true if this and from are equal.

Definition at line 1992 of file hashTable_tpl.h.

1993 {
1995 }
bool operator==(const HashTableConstIterator< Key, Val > &from) const noexcept
Checks whether two iterators are pointing toward equal elements.

References HashTableIterator(), and HashTableConstIterator< Key, Val >::operator==().

Here is the call graph for this function:

◆ val() [1/2]

template<typename Key, typename Val>
const HashTableConstIterator< Key, Val >::mapped_type & HashTableConstIterator< Key, Val >::val ( ) const
nodiscardinherited

Returns the mapped value pointed to by the iterator.

Warning
Using this method on an iterator that points to an element that has been deleted will most certainly result in a segfault. If unsure, use a safe iterator instead of an unsafe one.
Returns
Returns the mapped value pointed to by the iterator.

Definition at line 1793 of file hashTable_tpl.h.

1793 {
1794 if (_bucket_) return _bucket_->val();
1795 else { GUM_ERROR(UndefinedIteratorValue, "Accessing a nullptr object") }
1796 }

References _bucket_, and GUM_ERROR.

◆ val() [2/2]

template<typename Key, typename Val>
HashTableIterator< Key, Val >::mapped_type & HashTableIterator< Key, Val >::val ( )

Returns the mapped value pointed to by the iterator.

Warning
using this method on an iterator that points to an element that has been deleted will most certainly result in a segfault. If unsure, use a safe iterator instead of an unsafe one.
Returns
Returns the mapped value pointed to by the iterator.

Definition at line 1953 of file hashTable_tpl.h.

1953 {
1954 if (this->_bucket_) return this->_bucket_->val();
1955 else { GUM_ERROR(UndefinedIteratorValue, "Accessing a nullptr object") }
1956 }

References HashTableConstIterator< Key, Val >::_bucket_, and GUM_ERROR.

Member Data Documentation

◆ _bucket_

template<typename Key, typename Val>
HashTable<Key,Val>::Bucket* HashTableConstIterator< Key, Val >::_bucket_ {nullptr}
protectedinherited

The bucket in the chained list pointed to by the iterator.

Definition at line 2396 of file hashTable.h.

2396{nullptr};

Referenced by _getBucket_(), gum::HashTableConstIteratorSafe< const gum::DiscreteVariable *, Idx >::_getIndex_(), clear(), key(), operator*(), operator++(), operator+=(), operator=(), val(), and HashTableIterator< Key, Val >::val().

◆ _index_

template<typename Key, typename Val>
Size HashTableConstIterator< Key, Val >::_index_ {Size(0)}
protectedinherited

The index of the chained list pointed by the iterator in the array of nodes of the hash table.

Definition at line 2393 of file hashTable.h.

2393{Size(0)};

Referenced by _getIndex_(), clear(), operator+=(), and operator=().

◆ _table_

template<typename Key, typename Val>
const HashTable< Key, Val >* HashTableConstIterator< Key, Val >::_table_ {nullptr}
protectedinherited

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