DSA - Data Structures and Algorithms
Loading...
Searching...
No Matches
dsa::ForwardList< T >::ForwardListIterator< IF_CONST > Class Template Reference

Implements ForwardListIterator. More...

#include <forward_list.h>

Public Types

using iterator_type = std::conditional_t<IF_CONST, const T, T>
 Alias for iterator type.
using iterator_category = std::forward_iterator_tag
 Alias for forward iterator tag, define iterator direction.
using difference_type = std::ptrdiff_t
 Alias for pointer difference type.
using value_type = T
 Alias for data type used by iterator.
using size_type = std::size_t
 Alias for size type used in class.
using pointer = iterator_type*
 Alias for pointer to data type used by iterator.
using reference = iterator_type&
 Alias for reference to type used by iterator.

Public Member Functions

 ForwardListIterator () noexcept=default
 Construct a new ForwardListIterator object.
 ForwardListIterator (NodeBase *node) noexcept
 Construct a new ForwardListIterator object.
auto operator= (NodeBase *node) -> ForwardListIterator &
 Overload operator= to assign node to currently pointed ForwardListIterator.
auto operator++ () -> ForwardListIterator &
 Overload pre-increment operator++ to point ForwardListIterator at next Node.
auto operator++ (int) -> ForwardListIterator
 Overload post-increment operator++ to point ForwardListIterator at next Node.
auto operator== (const ForwardListIterator< IF_CONST > &other) const -> bool
 Overload operator!= for ForwardListIterator objects comparison.
auto operator!= (const ForwardListIterator< IF_CONST > &other) const -> bool
 Overload operator!= for ForwardListIterator objects comparison.
auto operator* () const -> reference
 Overload operator* to dereference Node value / data.
auto operator-> () -> pointer
 Overload operator-> to get pointer to Node value / data.
 operator ForwardListIterator< true > ()
 convert ForwardListIterator to Basic_Const_Iterator

Friends

class ForwardList
 Forward friend declaration of ForwardList.

Detailed Description

template<typename T>
template<bool IF_CONST>
class dsa::ForwardList< T >::ForwardListIterator< IF_CONST >

Implements ForwardListIterator.

Class is used to generate iterator and const_iterator types. Template variable IF_CONST control whether reference or const reference is returned to underlying data type

Template Parameters
IF_CONSTif true generate iterator with const reference to underlying data type

Definition at line 167 of file forward_list.h.

Member Typedef Documentation

◆ difference_type

template<typename T>
template<bool IF_CONST>
using dsa::ForwardList< T >::ForwardListIterator< IF_CONST >::difference_type = std::ptrdiff_t

Alias for pointer difference type.

Used by STL to define distance between two pointers

Definition at line 192 of file forward_list.h.

◆ iterator_category

template<typename T>
template<bool IF_CONST>
using dsa::ForwardList< T >::ForwardListIterator< IF_CONST >::iterator_category = std::forward_iterator_tag

Alias for forward iterator tag, define iterator direction.

Used by STL to define iterator features. Forward iterator allows iteration only in forward direction.

Definition at line 185 of file forward_list.h.

◆ iterator_type

template<typename T>
template<bool IF_CONST>
using dsa::ForwardList< T >::ForwardListIterator< IF_CONST >::iterator_type = std::conditional_t<IF_CONST, const T, T>

Alias for iterator type.

Template Parameters
IF_CONSTif true generate iterator with const reference to underlying data type
Tdata type

Definition at line 177 of file forward_list.h.

◆ pointer

template<typename T>
template<bool IF_CONST>
using dsa::ForwardList< T >::ForwardListIterator< IF_CONST >::pointer = iterator_type*

Alias for pointer to data type used by iterator.

Template Parameters
T*pointer to data type

Definition at line 213 of file forward_list.h.

◆ reference

template<typename T>
template<bool IF_CONST>
using dsa::ForwardList< T >::ForwardListIterator< IF_CONST >::reference = iterator_type&

Alias for reference to type used by iterator.

Definition at line 218 of file forward_list.h.

◆ size_type

template<typename T>
template<bool IF_CONST>
using dsa::ForwardList< T >::ForwardListIterator< IF_CONST >::size_type = std::size_t

Alias for size type used in class.

Template Parameters
Tsize type

Definition at line 206 of file forward_list.h.

◆ value_type

template<typename T>
template<bool IF_CONST>
using dsa::ForwardList< T >::ForwardListIterator< IF_CONST >::value_type = T

Alias for data type used by iterator.

Template Parameters
Titerated element type

Definition at line 199 of file forward_list.h.

Constructor & Destructor Documentation

◆ ForwardListIterator()

template<typename T>
template<bool IF_CONST>
dsa::ForwardList< T >::ForwardListIterator< IF_CONST >::ForwardListIterator ( NodeBase * node)
inlinenoexcept

Construct a new ForwardListIterator object.

Parameters
[in]nodeinput Node

Definition at line 230 of file forward_list.h.

231 : m_current_node{ node }
232 {}
Implements ForwardList using Node with pointer to next element as internal base.

Member Function Documentation

◆ operator ForwardListIterator< true >()

template<typename T>
template<bool IF_CONST>
dsa::ForwardList< T >::ForwardListIterator< IF_CONST >::operator ForwardListIterator< true > ( )
inline

convert ForwardListIterator to Basic_Const_Iterator

Definition at line 330 of file forward_list.h.

331 {
332 return ForwardListIterator<true>(m_current_node);
333 }
ForwardListIterator() noexcept=default
Construct a new ForwardListIterator object.

◆ operator!=()

template<typename T>
template<bool IF_CONST>
auto dsa::ForwardList< T >::ForwardListIterator< IF_CONST >::operator!= ( const ForwardListIterator< IF_CONST > & other) const -> bool
inline

Overload operator!= for ForwardListIterator objects comparison.

Parameters
[in]otherinput ForwardListIterator of other object
Returns
bool comparison result
Return values
trueif ForwardListIterator objects are different
falseif ForwardListIterator objects are the same

Definition at line 294 of file forward_list.h.

295 {
296 return !operator==(other);
297 }
auto operator==(const ForwardListIterator< IF_CONST > &other) const -> bool
Overload operator!= for ForwardListIterator objects comparison.

◆ operator*()

template<typename T>
template<bool IF_CONST>
auto dsa::ForwardList< T >::ForwardListIterator< IF_CONST >::operator* ( ) const -> reference
inline

Overload operator* to dereference Node value / data.

Returns
T& reference or const reference to data stored in Node

Definition at line 304 of file forward_list.h.

305 {
306 if (Node* node = dynamic_cast<Node*>(m_current_node))
307 {
308 return node->value();
309 }
310 throw std::runtime_error("Invalid iterator dereference");
311 }

◆ operator++() [1/2]

template<typename T>
template<bool IF_CONST>
auto dsa::ForwardList< T >::ForwardListIterator< IF_CONST >::operator++ ( ) -> ForwardListIterator&
inline

Overload pre-increment operator++ to point ForwardListIterator at next Node.

Returns
ForwardListIterator& reference to next Node

Definition at line 251 of file forward_list.h.

252 {
253 if (m_current_node)
254 {
255 m_current_node = m_current_node->m_next;
256 }
257
258 return *this;
259 }

◆ operator++() [2/2]

template<typename T>
template<bool IF_CONST>
auto dsa::ForwardList< T >::ForwardListIterator< IF_CONST >::operator++ ( int ) -> ForwardListIterator
inline

Overload post-increment operator++ to point ForwardListIterator at next Node.

Returns
ForwardListIterator& reference to next ForwardListIterator

Definition at line 266 of file forward_list.h.

267 {
268 const ForwardListIterator iterator = *this;
269 ++(*this);
270 return iterator;
271 }

◆ operator->()

template<typename T>
template<bool IF_CONST>
auto dsa::ForwardList< T >::ForwardListIterator< IF_CONST >::operator-> ( ) -> pointer
inline

Overload operator-> to get pointer to Node value / data.

Returns
T* pointer to data stored in Node

Definition at line 318 of file forward_list.h.

319 {
320 if (Node* node = dynamic_cast<Node*>(m_current_node))
321 {
322 return &node->value();
323 }
324 throw std::runtime_error("Invalid iterator pointer");
325 }

◆ operator=()

template<typename T>
template<bool IF_CONST>
auto dsa::ForwardList< T >::ForwardListIterator< IF_CONST >::operator= ( NodeBase * node) -> ForwardListIterator&
inline

Overload operator= to assign node to currently pointed ForwardListIterator.

Parameters
[in]nodeinput Node
Returns
ForwardListIterator& reference to updated Node

Definition at line 240 of file forward_list.h.

241 {
242 this->m_current_node = node;
243 return *this;
244 }

◆ operator==()

template<typename T>
template<bool IF_CONST>
auto dsa::ForwardList< T >::ForwardListIterator< IF_CONST >::operator== ( const ForwardListIterator< IF_CONST > & other) const -> bool
inline

Overload operator!= for ForwardListIterator objects comparison.

Parameters
[in]otherinput ForwardListIterator of other object
Returns
bool comparison result
Return values
trueif ForwardListIterator objects are the same
falseif ForwardListIterator objects are different

Definition at line 281 of file forward_list.h.

282 {
283 return m_current_node == other.m_current_node;
284 }

◆ ForwardList

template<typename T>
template<bool IF_CONST>
friend class ForwardList
friend

Forward friend declaration of ForwardList.

Definition at line 340 of file forward_list.h.


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