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

Implements ListIterator. More...

#include <list.h>

Public Types

using iterator_type = std::conditional_t<IF_CONST, const T, T>
 Alias for iterator type.
using iterator_category = std::bidirectional_iterator_tag
 Alias for bidirectional 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 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

 ListIterator () noexcept=default
 Construct a new ListIterator object.
 ListIterator (NodeBase *node) noexcept
 Construct a new ListIterator object.
auto operator= (NodeBase *node) -> ListIterator &
 Overload operator= to assign node to currently pointed ListIterator.
auto operator++ () -> ListIterator &
 Overload pre-increment operator++ to point ListIterator at next Node.
auto operator++ (int) -> ListIterator
 Overload post-increment operator++ to point ListIterator at next Node.
auto operator-- () -> ListIterator &
 Overload pre-decrement operator-- to point ListIterator at previous Node.
auto operator-- (int) -> ListIterator
 Overload post-decrement operator-- to point ListIterator at previous Node.
auto operator== (const ListIterator &other) const -> bool
 Overload operator!= for ListIterator objects comparison.
auto operator!= (const ListIterator &other) const -> bool
 Overload operator!= for ListIterator objects comparison.
auto operator[] (size_t index) -> ListIterator
 Overload operator[] for ListIterator iterator access.
auto operator* () const -> reference
 Overload operator* to dereference Node value / data.
auto operator-> () -> pointer
 Overload operator-> to get pointer to Node value / data.
 operator ListIterator< true > ()
 convert ListIterator to Basic_const_iterator

Friends

class List
 Forward friend declaration of List.

Detailed Description

template<typename T>
template<bool IF_CONST>
class dsa::List< T >::ListIterator< IF_CONST >

Implements ListIterator.

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
Ttype of data stored in Node

Definition at line 182 of file list.h.

Member Typedef Documentation

◆ difference_type

template<typename T>
template<bool IF_CONST>
using dsa::List< T >::ListIterator< IF_CONST >::difference_type = std::ptrdiff_t

Alias for pointer difference type.

Used by STL to define distance between two pointers

Definition at line 207 of file list.h.

◆ iterator_category

template<typename T>
template<bool IF_CONST>
using dsa::List< T >::ListIterator< IF_CONST >::iterator_category = std::bidirectional_iterator_tag

Alias for bidirectional iterator tag, define iterator direction.

Used by STL to define iterator features. Bidirectional iterator allows iteration forward and backward directions.

Definition at line 200 of file list.h.

◆ iterator_type

template<typename T>
template<bool IF_CONST>
using dsa::List< T >::ListIterator< 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 192 of file list.h.

◆ pointer

template<typename T>
template<bool IF_CONST>
using dsa::List< T >::ListIterator< IF_CONST >::pointer = iterator_type*

Alias for pointer to data type used by iterator.

Template Parameters
T*pointer to data type

Definition at line 221 of file list.h.

◆ reference

template<typename T>
template<bool IF_CONST>
using dsa::List< T >::ListIterator< IF_CONST >::reference = iterator_type&

Alias for reference to type used by iterator.

Definition at line 226 of file list.h.

◆ value_type

template<typename T>
template<bool IF_CONST>
using dsa::List< T >::ListIterator< IF_CONST >::value_type = T

Alias for data type used by iterator.

Template Parameters
Titerated element type

Definition at line 214 of file list.h.

Constructor & Destructor Documentation

◆ ListIterator()

template<typename T>
template<bool IF_CONST>
dsa::List< T >::ListIterator< IF_CONST >::ListIterator ( NodeBase * node)
inlinenoexcept

Construct a new ListIterator object.

Parameters
[in]nodeinput Node

Definition at line 238 of file list.h.

239 : m_current_node{ node }
240 {
241 }
Implements List using Node with pointer to adjacent elements as internal base.
Definition list.h:57

Member Function Documentation

◆ operator ListIterator< true >()

template<typename T>
template<bool IF_CONST>
dsa::List< T >::ListIterator< IF_CONST >::operator ListIterator< true > ( )
inline

convert ListIterator to Basic_const_iterator

Definition at line 393 of file list.h.

394 {
395 return ListIterator<true>(m_current_node);
396 }
ListIterator() noexcept=default
Construct a new ListIterator object.

◆ operator!=()

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

Overload operator!= for ListIterator objects comparison.

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

Definition at line 330 of file list.h.

331 {
332 return !operator==(other);
333 }
auto operator==(const ListIterator &other) const -> bool
Overload operator!= for ListIterator objects comparison.
Definition list.h:317

◆ operator*()

template<typename T>
template<bool IF_CONST>
auto dsa::List< T >::ListIterator< 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 367 of file list.h.

368 {
369 if (Node* node = dynamic_cast<Node*>(m_current_node))
370 {
371 return node->value();
372 }
373 throw std::runtime_error("Invalid iterator dereference");
374 }

◆ operator++() [1/2]

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

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

Returns
ListIterator& reference to next Node

Definition at line 260 of file list.h.

261 {
262 if (m_current_node)
263 {
264 m_current_node = m_current_node->m_next.get();
265 }
266
267 return *this;
268 }

◆ operator++() [2/2]

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

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

Returns
ListIterator& reference to next ListIterator

Definition at line 275 of file list.h.

276 {
277 const ListIterator iterator = *this;
278 ++(*this);
279 return iterator;
280 }

◆ operator--() [1/2]

template<typename T>
template<bool IF_CONST>
auto dsa::List< T >::ListIterator< IF_CONST >::operator-- ( ) -> ListIterator&
inline

Overload pre-decrement operator-- to point ListIterator at previous Node.

Returns
ListIterator& reference to previous Node

Definition at line 287 of file list.h.

288 {
289 if (m_current_node)
290 {
291 m_current_node = m_current_node->m_prev;
292 }
293
294 return *this;
295 }

◆ operator--() [2/2]

template<typename T>
template<bool IF_CONST>
auto dsa::List< T >::ListIterator< IF_CONST >::operator-- ( int ) -> ListIterator
inline

Overload post-decrement operator-- to point ListIterator at previous Node.

Returns
ListIterator& reference to previous ListIterator

Definition at line 302 of file list.h.

303 {
304 const ListIterator iterator = *this;
305 --(*this);
306 return iterator;
307 }

◆ operator->()

template<typename T>
template<bool IF_CONST>
auto dsa::List< T >::ListIterator< 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 381 of file list.h.

382 {
383 if (Node* node = dynamic_cast<Node*>(m_current_node))
384 {
385 return &node->value();
386 }
387 throw std::runtime_error("Invalid iterator pointer");
388 }

◆ operator=()

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

Overload operator= to assign node to currently pointed ListIterator.

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

Definition at line 249 of file list.h.

250 {
251 this->m_current_node = node;
252 return *this;
253 }

◆ operator==()

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

Overload operator!= for ListIterator objects comparison.

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

Definition at line 317 of file list.h.

318 {
319 return m_current_node == other.m_current_node;
320 }

◆ operator[]()

template<typename T>
template<bool IF_CONST>
auto dsa::List< T >::ListIterator< IF_CONST >::operator[] ( size_t index) -> ListIterator
inline

Overload operator[] for ListIterator iterator access.

Parameters
[in]indexnumber of Node to move forward
Returns
ListIterator to Node pointed by index from List front
Return values
validListIterator if index is valid
nullptrif index is invalid

Definition at line 343 of file list.h.

344 {
345 NodeBase* temp{ m_current_node };
346
347 for (size_t i = 0; i < index; i++)
348 {
349 if (temp->m_next)
350 {
351 temp = temp->m_next.get();
352 }
353 else
354 {
355 return nullptr;
356 }
357 }
358
359 return temp;
360 }
auto get(size_t index) const -> Node *
Function returns pointer to specific Node of List.
Definition list.h:1768

◆ List

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

Forward friend declaration of List.

Definition at line 403 of file list.h.


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