![]() |
aGrUM 2.3.2
a C++ library for (probabilistic) graphical models
|
Safe iterators for Lists. More...
#include <agrum/base/core/list.h>
Public Types | |
| using | iterator_category = std::bidirectional_iterator_tag |
| Types for STL compliance. | |
| using | value_type = Val |
| Types for STL compliance. | |
| using | reference = Val& |
| Types for STL compliance. | |
| using | const_reference = const Val& |
| Types for STL compliance. | |
| using | pointer = Val* |
| Types for STL compliance. | |
| using | const_pointer = const Val* |
| Types for STL compliance. | |
| using | difference_type = std::ptrdiff_t |
| Types for STL compliance. | |
Public Member Functions | |
Constructors / Destructors | |
| ListIteratorSafe () noexcept | |
| Default constructor. | |
| ListIteratorSafe (const List< Val > &theList) | |
| Constructor for a begin. | |
| ListIteratorSafe (const ListIteratorSafe< Val > &src) | |
| Copy constructor. | |
| ListIteratorSafe (const List< Val > &theList, Size ind_elt) | |
| Constructor for an iterator pointing to the ind_eltth element of a List. | |
| ListIteratorSafe (ListIteratorSafe< Val > &&src) | |
| Move constructor. | |
| ~ListIteratorSafe () | |
| Class Desctructor. | |
Operators | |
| ListIteratorSafe< Val > & | operator= (const ListIteratorSafe< Val > &src) |
| Copy operator. | |
| ListIteratorSafe< Val > & | operator= (ListIteratorSafe< Val > &&src) |
| Move operator. | |
| ListIteratorSafe< Val > & | operator++ () noexcept |
| Makes the iterator point to the next element in the List. | |
| ListIteratorSafe< Val > & | operator+= (difference_type i) noexcept |
| Makes the iterator point to i elements further in the List. | |
| ListIteratorSafe< Val > & | operator-- () noexcept |
| Makes the iterator point to the preceding element in the List. | |
| ListIteratorSafe< Val > & | operator-= (difference_type i) noexcept |
| Makes the iterator point to i elements befor in the List. | |
| ListIteratorSafe< Val > | operator+ (difference_type i) noexcept |
| Returns a new iterator pointing to i further elements in the gum::List. | |
| ListIteratorSafe< Val > | operator- (difference_type i) noexcept |
| Returns a new iterator pointing to i preceding elements in the gum::List. | |
| Val & | operator* () |
| Gives access to the content of the iterator. | |
| Val * | operator-> () |
| Dereferences the value pointed to by the iterator. | |
| bool | operator!= (const ListIteratorSafe< Val > &src) const |
| Checks whether two iterators point toward different elements. | |
| bool | operator== (const ListIteratorSafe< Val > &src) const |
| Checks whether two iterators point toward the same elements. | |
| const Val & | operator* () const |
| Gives access to the content of the iterator. | |
| const Val * | operator-> () const |
| Dereferences the value pointed to by the iterator. | |
Accessors / Modifiers | |
| void | clear () |
| Makes the iterator point toward nothing. | |
| void | setToEnd () |
| Positions the iterator to the end of the list. | |
| bool | isEnd () const |
| Returns a bool indicating whether the iterator points to the end of the list. | |
Operators | |
| bool | operator!= (const ListConstIteratorSafe< Val > &src) const |
| Checks whether two iterators point toward different elements. | |
| bool | operator== (const ListConstIteratorSafe< Val > &src) const |
| Checks whether two iterators point toward the same elements. | |
Private Member Functions | |
| ListBucket< Val > * | _getBucket_ () const noexcept |
| Returns the bucket the iterator is pointing to. | |
| void | _removeFromSafeList_ () const |
| Remove the iterator for its list' safe iterators list. | |
| ListConstIteratorSafe< Val > & | _opPlus_ (Size i) noexcept |
| Makes the iterator point to the next element in the List. | |
| ListConstIteratorSafe< Val > & | _opMinus_ (Size i) noexcept |
| Makes the iterator point to i elements before in the List. | |
Private Attributes | |
| const List< Val > * | _list_ {nullptr} |
| The list the iterator is pointing to. | |
| ListBucket< Val > * | _bucket_ {nullptr} |
| The bucket in the chained list pointed to by the iterator. | |
| ListBucket< Val > * | _next_current_bucket_ {nullptr} |
| The bucket we should start from when we are pointing on a deleted bucket and we decide to do a ++. | |
| ListBucket< Val > * | _prev_current_bucket_ {nullptr} |
| The bucket we should start from when we are pointing on a deleted bucket and we decide to do a –. | |
| bool | _null_pointing_ {false} |
| Indicates whether the bucket the iterator points to has been deleted. | |
Safe iterators for Lists.
Class ListIteratorSafe implements iterators for List. However, developers may consider using List<x>::iterator_safe instead of ListIteratorSafe<x>.
These iterators ensure that whenever they point to an element that is being deleted from memory, their accessing this element will never produce a segmentation fault but rather throw an exception. Similarly, incrementing or decrementing an iterator pointing to a deleted element is guaranteed to make the iterator point on the next (or preceding) element that has not been deleted. This enables safely writing code like:
| Val | The gum::List values type. |
| using gum::ListIteratorSafe< Val >::const_pointer = const Val* |
| using gum::ListIteratorSafe< Val >::const_reference = const Val& |
| using gum::ListIteratorSafe< Val >::difference_type = std::ptrdiff_t |
| using gum::ListIteratorSafe< Val >::iterator_category = std::bidirectional_iterator_tag |
| using gum::ListIteratorSafe< Val >::pointer = Val* |
| using gum::ListIteratorSafe< Val >::reference = Val& |
| using gum::ListIteratorSafe< Val >::value_type = Val |
|
explicitnoexcept |
Default constructor.
Returns an iterator pointing toward nothing.
Definition at line 967 of file list_tpl.h.
References gum::ListConstIteratorSafe< Val >::ListConstIteratorSafe(), and ListIteratorSafe().
Referenced by ListIteratorSafe(), ListIteratorSafe(), ListIteratorSafe(), ListIteratorSafe(), ~ListIteratorSafe(), operator!=(), operator+(), operator++(), operator-(), operator--(), operator-=(), operator=(), operator=(), and operator==().
| INLINE gum::ListIteratorSafe< Val >::ListIteratorSafe | ( | const List< Val > & | theList | ) |
Constructor for a begin.
Definition at line 974 of file list_tpl.h.
References gum::ListConstIteratorSafe< Val >::ListConstIteratorSafe(), ListIteratorSafe(), and gum::ListConstIteratorSafe< Val >::List< Val >.
| INLINE gum::ListIteratorSafe< Val >::ListIteratorSafe | ( | const ListIteratorSafe< Val > & | src | ) |
Copy constructor.
| src | The gum::ListConstIteratorSafe to copy. |
Definition at line 981 of file list_tpl.h.
References gum::ListConstIteratorSafe< Val >::ListConstIteratorSafe(), and ListIteratorSafe().
| INLINE gum::ListIteratorSafe< Val >::ListIteratorSafe | ( | const List< Val > & | theList, |
| Size | ind_elt ) |
Constructor for an iterator pointing to the ind_eltth element of a List.
| theList | The list to iterate over. |
| ind_elt | The iterator starting position. |
| UndefinedIteratorValue | Raised if the element does not exist in the list. |
Definition at line 989 of file list_tpl.h.
References gum::ListConstIteratorSafe< Val >::List< Val >.
| INLINE gum::ListIteratorSafe< Val >::ListIteratorSafe | ( | ListIteratorSafe< Val > && | src | ) |
Move constructor.
| src | The gum::ListConstIterator to move. |
Definition at line 996 of file list_tpl.h.
References gum::ListConstIteratorSafe< Val >::ListConstIteratorSafe(), and ListIteratorSafe().
| INLINE gum::ListIteratorSafe< Val >::~ListIteratorSafe | ( | ) |
Class Desctructor.
Definition at line 1023 of file list_tpl.h.
References ListIteratorSafe().
|
privatenoexceptinherited |
Returns the bucket the iterator is pointing to.
Definition at line 703 of file list_tpl.h.
References _bucket_.
Referenced by gum::List< Val >::_insert_(), gum::List< Val >::erase(), and gum::List< Val >::erase().
|
privatenoexceptinherited |
Makes the iterator point to i elements before in the List.
Definition at line 772 of file list_tpl.h.
References ListConstIteratorSafe(), _bucket_, _next_current_bucket_, _null_pointing_, and _prev_current_bucket_.
Referenced by operator+=(), and operator-=().
|
privatenoexceptinherited |
Makes the iterator point to the next element in the List.
Definition at line 809 of file list_tpl.h.
References ListConstIteratorSafe(), _bucket_, _next_current_bucket_, _null_pointing_, and _prev_current_bucket_.
Referenced by operator+=(), and operator-=().
|
privateinherited |
Remove the iterator for its list' safe iterators list.
Definition at line 594 of file list_tpl.h.
References _list_.
Referenced by ~ListConstIteratorSafe(), clear(), and operator=().
|
inherited |
Makes the iterator point toward nothing.
A method for detaching the iterator from the List it is attached to. It is mainly used by the List when the latter is deleted while the iterator is still alive. After being detached, the iterator does not point to any element, i.e., trying to access its content will raise an exception.
Definition at line 709 of file list_tpl.h.
References _bucket_, _list_, _null_pointing_, and _removeFromSafeList_().
Referenced by setToEnd().
|
inherited |
Returns a bool indicating whether the iterator points to the end of the list.
Definition at line 728 of file list_tpl.h.
References _bucket_, _next_current_bucket_, _null_pointing_, and _prev_current_bucket_.
|
inherited |
Checks whether two iterators point toward different elements.
list1.end() == list2.rend().| src | The gum::ListConstIteratorSafe to test for inequality. |
Definition at line 917 of file list_tpl.h.
References ListConstIteratorSafe(), _bucket_, _next_current_bucket_, _null_pointing_, and _prev_current_bucket_.
| INLINE bool gum::ListIteratorSafe< Val >::operator!= | ( | const ListIteratorSafe< Val > & | src | ) | const |
Checks whether two iterators point toward different elements.
list1.end() == list2.rend().| src | The gum::ListIteratorSafe to test for inequality. |
Definition at line 1035 of file list_tpl.h.
References ListIteratorSafe(), and gum::operator==().
| INLINE Val & gum::ListIteratorSafe< Val >::operator* | ( | ) |
Gives access to the content of the iterator.
| UndefinedIteratorValue | Raised if the iterator points to nothing. |
Definition at line 1097 of file list_tpl.h.
References gum::ListConstIteratorSafe< Val >::operator*().
| INLINE const Val & gum::ListIteratorSafe< Val >::operator* | ( | ) | const |
Gives access to the content of the iterator.
| UndefinedIteratorValue | Raised if the iterator points to nothing. |
Definition at line 1103 of file list_tpl.h.
References gum::ListConstIteratorSafe< Val >::operator*().
|
noexcept |
Returns a new iterator pointing to i further elements in the gum::List.
| i | The number of steps to move the iterator. |
Definition at line 1071 of file list_tpl.h.
References ListIteratorSafe().
|
noexcept |
Makes the iterator point to the next element in the List.
The above loop is guaranteed to parse the whole List as long as no element is added to or deleted from the List while being in the loop. Runs in constant time.
Definition at line 1041 of file list_tpl.h.
References ListIteratorSafe(), and gum::ListConstIteratorSafe< Val >::operator++().
|
noexcept |
Makes the iterator point to i elements further in the List.
| i | The number of steps to move the iterator. |
Definition at line 1048 of file list_tpl.h.
|
noexcept |
Returns a new iterator pointing to i preceding elements in the gum::List.
| i | The number of steps to move the iterator. |
Definition at line 1078 of file list_tpl.h.
References ListIteratorSafe().
|
noexcept |
Makes the iterator point to the preceding element in the List.
The above loop is guaranteed to parse the whole List as long as no element is added to or deleted from the List while being in the loop. Runs in constant time.
Definition at line 1056 of file list_tpl.h.
References ListIteratorSafe(), and gum::ListConstIteratorSafe< Val >::operator--().
|
noexcept |
Makes the iterator point to i elements befor in the List.
| i | The number of steps to move the iterator. |
Definition at line 1063 of file list_tpl.h.
References ListIteratorSafe(), and gum::ListConstIteratorSafe< Val >::operator-=().
| INLINE Val * gum::ListIteratorSafe< Val >::operator-> | ( | ) |
Dereferences the value pointed to by the iterator.
| UndefinedIteratorValue | Raised if the iterator points to nothing. |
Definition at line 1085 of file list_tpl.h.
References gum::ListConstIteratorSafe< Val >::operator->().
| INLINE const Val * gum::ListIteratorSafe< Val >::operator-> | ( | ) | const |
Dereferences the value pointed to by the iterator.
| UndefinedIteratorValue | Raised if the iterator points to nothing. |
Definition at line 1091 of file list_tpl.h.
References gum::ListConstIteratorSafe< Val >::operator->().
| INLINE ListIteratorSafe< Val > & gum::ListIteratorSafe< Val >::operator= | ( | const ListIteratorSafe< Val > & | src | ) |
Copy operator.
The current iterator now points to the same element as iterator from.
| src | The gum::ListIteratorSafe to copy. |
Definition at line 1004 of file list_tpl.h.
References ListIteratorSafe(), and gum::ListConstIteratorSafe< Val >::operator=().
| INLINE ListIteratorSafe< Val > & gum::ListIteratorSafe< Val >::operator= | ( | ListIteratorSafe< Val > && | src | ) |
Move operator.
| src | The gum::ListIteratorSafe to move. |
Definition at line 1014 of file list_tpl.h.
References ListIteratorSafe(), and gum::ListConstIteratorSafe< Val >::operator=().
|
inherited |
Checks whether two iterators point toward the same elements.
list1.end() == list2.rend().| src | The gum::ListConstIteratorSafe to test for equality. |
Definition at line 926 of file list_tpl.h.
References ListConstIteratorSafe(), _bucket_, _next_current_bucket_, _null_pointing_, and _prev_current_bucket_.
Referenced by gum::ListIteratorSafe< Val >::operator==().
| INLINE bool gum::ListIteratorSafe< Val >::operator== | ( | const ListIteratorSafe< Val > & | src | ) | const |
Checks whether two iterators point toward the same elements.
list1.end() == list2.rend().| src | The gum::ListIteratorSafe to test for equality. |
Definition at line 1029 of file list_tpl.h.
References ListIteratorSafe(), and gum::ListConstIteratorSafe< Val >::operator==().
|
inherited |
Positions the iterator to the end of the list.
Definition at line 721 of file list_tpl.h.
References clear().
|
privateinherited |
The bucket in the chained list pointed to by the iterator.
Definition at line 2233 of file list.h.
Referenced by ListConstIteratorSafe(), ListConstIteratorSafe(), ListConstIteratorSafe(), _getBucket_(), _opMinus_(), _opPlus_(), clear(), isEnd(), operator!=(), operator*(), operator++(), operator--(), operator->(), and operator==().
|
privateinherited |
The list the iterator is pointing to.
Definition at line 2230 of file list.h.
Referenced by ListConstIteratorSafe(), ListConstIteratorSafe(), ListConstIteratorSafe(), ListConstIteratorSafe(), ~ListConstIteratorSafe(), _removeFromSafeList_(), clear(), gum::List< Val >::insert(), gum::List< Val >::insert(), operator=(), and gum::List< gum::Instantiation * >::rend().
|
privateinherited |
The bucket we should start from when we are pointing on a deleted bucket and we decide to do a ++.
Definition at line 2237 of file list.h.
Referenced by ListConstIteratorSafe(), ListConstIteratorSafe(), gum::List< Val >::_insert_(), _opMinus_(), _opPlus_(), isEnd(), operator!=(), operator++(), operator--(), and operator==().
|
privateinherited |
Indicates whether the bucket the iterator points to has been deleted.
Definition at line 2244 of file list.h.
Referenced by ListConstIteratorSafe(), ListConstIteratorSafe(), gum::List< Val >::_insert_(), _opMinus_(), _opPlus_(), clear(), isEnd(), operator!=(), operator++(), operator--(), and operator==().
|
privateinherited |
The bucket we should start from when we are pointing on a deleted bucket and we decide to do a –.
Definition at line 2241 of file list.h.
Referenced by ListConstIteratorSafe(), ListConstIteratorSafe(), gum::List< Val >::_insert_(), _opMinus_(), _opPlus_(), isEnd(), operator!=(), operator++(), operator--(), and operator==().