aGrUM 3.1.1
a C++ library for (probabilistic) graphical models
gum::SetIterator< Key > Class Template Reference

Unsafe iterators for the Set class. More...

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

Collaboration diagram for gum::SetIterator< Key >:

Public Types

enum class  Position : unsigned char { BEGIN , END }
 An enumeration to position the iterator at the beginning or the end of the set. More...
using iterator_category = std::forward_iterator_tag
 Types for STL compliance.
using value_type = Key
 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

Constructors / Destructors
 SetIterator () noexcept
 Default constructor: the iterator points toward nothing.
 SetIterator (const Set< Key > &from, Position pos=Position::BEGIN)
 Creates an iterator for a given set.
 SetIterator (const SetIterator< Key > &iter) noexcept
 Copy constructor.
 SetIterator (SetIterator< Key > &&from) noexcept
 Move constructor.
 ~SetIterator () noexcept
 Class destructor.
Operators
SetIterator< Key > & operator= (const SetIterator< Key > &iter) noexcept
 Assignment operator.
SetIterator< Key > & operator= (SetIterator< Key > &&from) noexcept
 Assignment operator.
SetIterator< Key > & operator++ () noexcept
 Increments the iterator.
SetIterator< Key > & operator+= (Size nb) noexcept
 Makes the iterator point to i elements further in the set.
SetIterator< Key > operator+ (Size nb) const noexcept
 Returns a new iterator.
bool operator== (const SetIterator< Key > &iter) const noexcept
 Indicates whether two iterators point toward the same element of a same set.
const Key & operator* () const
 Returns the element pointed to by the iterator.
const Key * operator-> () const
 Returns a pointer to the element pointed to by the iterator.
Accessors / Modifiers
void clear () noexcept
 makes the iterator point toward nothing (in particular, it is not related anymore to its current set).

Private Attributes

HashTableConstIterator< Key, bool_ht_iter_
 The underlying iterator for the set's hash table containing the data.

Friends

class Set< Key >
 For efficiency, Set should be able to modify the hash table iterator.
class SetIteratorSafe< Key >

Detailed Description

template<typename Key>
class gum::SetIterator< Key >

Unsafe iterators for the Set class.

Developers may consider using Set<x>::iterator instead of SetIterator<x>.

Warning
Use SetIterator only if you are sure that the iterator will never point to a deleted element. Pointing to a deleted element will most probably result in a segfault. If you are unsure, prefer using the safe iterators Set<>::iterator_safe.
Usage example:
// creation of a set with 10 elements
for (int i = 0; i< 10; ++i)
set<<i;
// parse the set
for (const auto iter = table.begin (); iter != table.end (); *++iter) {
// display the values
cerr << *iter << endl;
}
// check whether two iterators point toward the same element
Set<int>::iterator iter1 = table1.begin();
Set<int>::iterator iter2 = table1.end();
if (iter1 != iter)
cerr << "iter1 and iter2 point toward different elements";
Representation of a set.
Definition set.h:129
SetIterator< Key > iterator
Types for STL compliance.
Definition set.h:140
Template Parameters
KeyThe elements type.

Definition at line 806 of file set.h.

Member Typedef Documentation

◆ const_pointer

template<typename Key>
using gum::SetIterator< Key >::const_pointer = const value_type*

Types for STL compliance.

Definition at line 815 of file set.h.

◆ const_reference

template<typename Key>
using gum::SetIterator< Key >::const_reference = const value_type&

Types for STL compliance.

Definition at line 813 of file set.h.

◆ difference_type

template<typename Key>
using gum::SetIterator< Key >::difference_type = std::ptrdiff_t

Types for STL compliance.

Definition at line 816 of file set.h.

◆ iterator_category

template<typename Key>
using gum::SetIterator< Key >::iterator_category = std::forward_iterator_tag

Types for STL compliance.

Definition at line 810 of file set.h.

◆ pointer

template<typename Key>
using gum::SetIterator< Key >::pointer = value_type*

Types for STL compliance.

Definition at line 814 of file set.h.

◆ reference

template<typename Key>
using gum::SetIterator< Key >::reference = value_type&

Types for STL compliance.

Definition at line 812 of file set.h.

◆ value_type

template<typename Key>
using gum::SetIterator< Key >::value_type = Key

Types for STL compliance.

Definition at line 811 of file set.h.

Member Enumeration Documentation

◆ Position

template<typename Key>
enum class gum::SetIterator::Position : unsigned char
strong

An enumeration to position the iterator at the beginning or the end of the set.

Enumerator
BEGIN 
END 

Definition at line 824 of file set.h.

824: unsigned char { BEGIN, END };

Constructor & Destructor Documentation

◆ SetIterator() [1/4]

template<typename Key>
gum::SetIterator< Key >::SetIterator ( )
explicitnoexcept

Default constructor: the iterator points toward nothing.

Definition at line 177 of file set_tpl.h.

177 {
179 }
Unsafe iterators for the Set class.
Definition set.h:806
SetIterator() noexcept
Default constructor: the iterator points toward nothing.
Definition set_tpl.h:177

References SetIterator().

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

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

◆ SetIterator() [2/4]

template<typename Key>
gum::SetIterator< Key >::SetIterator ( const Set< Key > & from,
Position pos = Position::BEGIN )
explicit

Creates an iterator for a given set.

By default, the iterator points to the beginning of the set, but, using optional argument pos, you can make it point to end().

Parameters
fromThe gum::Set to iterator over.
posWhere to start iterating.

Definition at line 183 of file set_tpl.h.

183 :
184 _ht_iter_{pos == Position::END ? from._inside_.cend() : from._inside_.cbegin()} {
186 }
HashTableConstIterator< Key, bool > _ht_iter_
The underlying iterator for the set's hash table containing the data.
Definition set.h:964

References SetIterator(), _ht_iter_, and Set< Key >.

Here is the call graph for this function:

◆ SetIterator() [3/4]

template<typename Key>
gum::SetIterator< Key >::SetIterator ( const SetIterator< Key > & iter)
noexcept

Copy constructor.

Parameters
iterThe iterator to copy.

Definition at line 190 of file set_tpl.h.

190 :
193 }

References SetIterator(), and _ht_iter_.

Here is the call graph for this function:

◆ SetIterator() [4/4]

template<typename Key>
gum::SetIterator< Key >::SetIterator ( SetIterator< Key > && from)
noexcept

Move constructor.

Parameters
fromThe iterator to move.

Definition at line 197 of file set_tpl.h.

References SetIterator(), and _ht_iter_.

Here is the call graph for this function:

◆ ~SetIterator()

template<typename Key>
gum::SetIterator< Key >::~SetIterator ( )
noexcept

Class destructor.

Definition at line 204 of file set_tpl.h.

204 {
206 }

References SetIterator().

Here is the call graph for this function:

Member Function Documentation

◆ clear()

template<typename Key>
void gum::SetIterator< Key >::clear ( )
noexcept

makes the iterator point toward nothing (in particular, it is not related anymore to its current set).

Definition at line 267 of file set_tpl.h.

267 {
268 _ht_iter_.clear();
269 }

References _ht_iter_.

Referenced by Set< Key >.

Here is the caller graph for this function:

◆ operator*()

template<typename Key>
const Key & gum::SetIterator< Key >::operator* ( ) const

Returns the element pointed to by the iterator.

Exceptions
UndefinedIteratorValueRaised if the iterator does not point to an element of the set (for instance if the set or the element previously pointed to by the iterator have been deleted).
Returns
Returns the element pointed to by the iterator.

Definition at line 250 of file set_tpl.h.

250 {
251 // note that, if the hashtable's iterator points toward nothing, it will
252 // raise an UndefinedIteratorValue exception
253 return _ht_iter_.key();
254 }

References _ht_iter_.

◆ operator+()

template<typename Key>
SetIterator< Key > gum::SetIterator< Key >::operator+ ( Size nb) const
noexcept

Returns a new iterator.

Parameters
nbThe number of increments.
Returns
Returns a new iterator.

Definition at line 239 of file set_tpl.h.

239 {
240 return SetIterator< Key >{*this} += nb;
241 }

References SetIterator().

Here is the call graph for this function:

◆ operator++()

template<typename Key>
SetIterator< Key > & gum::SetIterator< Key >::operator++ ( )
noexcept

Increments the iterator.

Returns
This iterator.

Definition at line 222 of file set_tpl.h.

222 {
223 // note that, if the hashtable's iterator points toward nothing, the
224 // hashtable's iterator incrementation will do nothing. In particular, it
225 // will not segfault.
226 ++_ht_iter_;
227 return *this;
228 }

References SetIterator(), and _ht_iter_.

Here is the call graph for this function:

◆ operator+=()

template<typename Key>
SetIterator< Key > & gum::SetIterator< Key >::operator+= ( Size nb)
noexcept

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

Parameters
nbThe number of increments.
Returns
Returns this iterator.

Definition at line 232 of file set_tpl.h.

232 {
233 _ht_iter_ += nb;
234 return *this;
235 }

References SetIterator(), and _ht_iter_.

Here is the call graph for this function:

◆ operator->()

template<typename Key>
const Key * gum::SetIterator< Key >::operator-> ( ) const

Returns a pointer to the element pointed to by the iterator.

Exceptions
UndefinedIteratorValueRaised if the iterator does not point to an element of the set (for instance if the set or the element previously pointed to by the iterator have been deleted).
Returns
Returns a pointer to the element pointed to by the iterator.

Definition at line 258 of file set_tpl.h.

258 {
259 // note that, if the hashtable's iterator points toward nothing, it will
260 // raise an UndefinedIteratorValue exception
261 return &(_ht_iter_.key());
262 }

References _ht_iter_.

◆ operator=() [1/2]

template<typename Key>
SetIterator< Key > & gum::SetIterator< Key >::operator= ( const SetIterator< Key > & iter)
defaultnoexcept

Assignment operator.

Parameters
iterThe iterator to copy.
Returns
Returns this iterator.

References SetIterator().

Here is the call graph for this function:

◆ operator=() [2/2]

template<typename Key>
SetIterator< Key > & gum::SetIterator< Key >::operator= ( SetIterator< Key > && from)
noexcept

Assignment operator.

Parameters
fromThe iterator to copy.
Returns
Returns this iterator.

Definition at line 215 of file set_tpl.h.

215 {
217 return *this;
218 }

References SetIterator(), and _ht_iter_.

Here is the call graph for this function:

◆ operator==()

template<typename Key>
bool gum::SetIterator< Key >::operator== ( const SetIterator< Key > & iter) const
defaultnoexcept

Indicates whether two iterators point toward the same element of a same set.

Parameters
iterThe iterator to test for equality.
Returns
Returns true if both iterator are equal.

References SetIterator().

Here is the call graph for this function:

◆ Set< Key >

template<typename Key>
friend class Set< Key >
friend

For efficiency, Set should be able to modify the hash table iterator.

Definition at line 954 of file set.h.

References clear().

Referenced by SetIterator().

◆ SetIteratorSafe< Key >

template<typename Key>
friend class SetIteratorSafe< Key >
friend

Definition at line 954 of file set.h.

Member Data Documentation

◆ _ht_iter_

template<typename Key>
HashTableConstIterator< Key, bool > gum::SetIterator< Key >::_ht_iter_
private

The underlying iterator for the set's hash table containing the data.

Definition at line 964 of file set.h.

Referenced by SetIterator(), SetIterator(), SetIterator(), clear(), operator*(), operator++(), operator+=(), operator->(), operator=(), and gum::SetIteratorSafe< Key >::operator=().


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