retdec
Public Member Functions | Private Member Functions | Private Attributes | List of all members
retdec::fileformat::CharacterIterator< It, typename > Class Template Reference

#include <character_iterator.h>

Collaboration diagram for retdec::fileformat::CharacterIterator< It, typename >:
Collaboration graph
[legend]

Public Member Functions

 CharacterIterator (It first, It last, std::size_t charStep)
 
 CharacterIterator (It itr, It first, It last, std::size_t charStep)
 
 CharacterIterator (const CharacterIterator &)=default
 
CharacterIteratoroperator= (const CharacterIterator &)=default
 
char operator* () const
 
CharacterIteratoroperator++ ()
 
CharacterIterator operator++ (int)
 
CharacterIteratoroperator-- ()
 
CharacterIterator operator-- (int)
 
CharacterIteratoroperator+= (std::ptrdiff_t diff)
 
CharacterIteratoroperator-= (std::ptrdiff_t diff)
 
CharacterIterator operator+ (std::ptrdiff_t diff) const
 
CharacterIterator operator- (std::ptrdiff_t diff) const
 
std::ptrdiff_t operator- (const CharacterIterator &rhs) const
 
bool operator== (const CharacterIterator &rhs) const
 
bool operator!= (const CharacterIterator &rhs) const
 
bool operator< (const CharacterIterator &rhs) const
 
const It & getUnderlyingIterator () const
 
bool pointsToValidCharacter (CharacterEndianness endian) const
 

Private Member Functions

It safeAdvance (std::ptrdiff_t n)
 
bool pointsToValidCharacter (const It &charByte, const It &paddingFirst, const It &paddingLast) const
 

Private Attributes

It itr
 
It first
 
It last
 
std::size_t charStep
 

Detailed Description

template<typename It, typename = std::enable_if_t<std::is_same<typename std::iterator_traits<It>::iterator_category, std::random_access_iterator_tag>::value>>
class retdec::fileformat::CharacterIterator< It, typename >

Represents iterator for string characters in the random access container. It supports different character sizes and performs boundary checks.

Constructor & Destructor Documentation

◆ CharacterIterator() [1/3]

template<typename It , typename = std::enable_if_t<std::is_same<typename std::iterator_traits<It>::iterator_category, std::random_access_iterator_tag>::value>>
retdec::fileformat::CharacterIterator< It, typename >::CharacterIterator ( It  first,
It  last,
std::size_t  charStep 
)
inline

◆ CharacterIterator() [2/3]

template<typename It , typename = std::enable_if_t<std::is_same<typename std::iterator_traits<It>::iterator_category, std::random_access_iterator_tag>::value>>
retdec::fileformat::CharacterIterator< It, typename >::CharacterIterator ( It  itr,
It  first,
It  last,
std::size_t  charStep 
)
inline

◆ CharacterIterator() [3/3]

template<typename It , typename = std::enable_if_t<std::is_same<typename std::iterator_traits<It>::iterator_category, std::random_access_iterator_tag>::value>>
retdec::fileformat::CharacterIterator< It, typename >::CharacterIterator ( const CharacterIterator< It, typename > &  )
default

Member Function Documentation

◆ getUnderlyingIterator()

template<typename It , typename = std::enable_if_t<std::is_same<typename std::iterator_traits<It>::iterator_category, std::random_access_iterator_tag>::value>>
const It& retdec::fileformat::CharacterIterator< It, typename >::getUnderlyingIterator ( ) const
inline

Returns the underlying iterator of the byte sequence.

Returns
Underlying iterator.

◆ operator!=()

template<typename It , typename = std::enable_if_t<std::is_same<typename std::iterator_traits<It>::iterator_category, std::random_access_iterator_tag>::value>>
bool retdec::fileformat::CharacterIterator< It, typename >::operator!= ( const CharacterIterator< It, typename > &  rhs) const
inline

Checks whether iterators are not equal. They are equal if and only if they point to the same element.

Returns
true if not equal, otherwise false.

◆ operator*()

template<typename It , typename = std::enable_if_t<std::is_same<typename std::iterator_traits<It>::iterator_category, std::random_access_iterator_tag>::value>>
char retdec::fileformat::CharacterIterator< It, typename >::operator* ( ) const
inline

Dereference operator.

Returns
Pointed element.

◆ operator+()

template<typename It , typename = std::enable_if_t<std::is_same<typename std::iterator_traits<It>::iterator_category, std::random_access_iterator_tag>::value>>
CharacterIterator retdec::fileformat::CharacterIterator< It, typename >::operator+ ( std::ptrdiff_t  diff) const
inline

Moves iterator forwards by the specified amount of characters. Does not cross the end or beginning of the data.

Returns
Moved iterator.

◆ operator++() [1/2]

template<typename It , typename = std::enable_if_t<std::is_same<typename std::iterator_traits<It>::iterator_category, std::random_access_iterator_tag>::value>>
CharacterIterator& retdec::fileformat::CharacterIterator< It, typename >::operator++ ( )
inline

Makes the iterator point to the next character. Does nothing if iterator would cross the end.

Returns
Incremented iterator.

◆ operator++() [2/2]

template<typename It , typename = std::enable_if_t<std::is_same<typename std::iterator_traits<It>::iterator_category, std::random_access_iterator_tag>::value>>
CharacterIterator retdec::fileformat::CharacterIterator< It, typename >::operator++ ( int  )
inline

Makes the iterator point to the next character. Does nothing if iterator would cross the end.

Returns
Original iterator before incrementation.

◆ operator+=()

template<typename It , typename = std::enable_if_t<std::is_same<typename std::iterator_traits<It>::iterator_category, std::random_access_iterator_tag>::value>>
CharacterIterator& retdec::fileformat::CharacterIterator< It, typename >::operator+= ( std::ptrdiff_t  diff)
inline

Moves iterator forwards by the specified amount of characters. Does not cross the end or beginning of the data.

Returns
Moved iterator.

◆ operator-() [1/2]

template<typename It , typename = std::enable_if_t<std::is_same<typename std::iterator_traits<It>::iterator_category, std::random_access_iterator_tag>::value>>
std::ptrdiff_t retdec::fileformat::CharacterIterator< It, typename >::operator- ( const CharacterIterator< It, typename > &  rhs) const
inline

Returns the distance (in number of characters) between two iterators.

Returns
Distance.

◆ operator-() [2/2]

template<typename It , typename = std::enable_if_t<std::is_same<typename std::iterator_traits<It>::iterator_category, std::random_access_iterator_tag>::value>>
CharacterIterator retdec::fileformat::CharacterIterator< It, typename >::operator- ( std::ptrdiff_t  diff) const
inline

Moves iterator backwards by the specified amount of characters. Does not cross the end or beginning of the data.

Returns
Moved iterator.

◆ operator--() [1/2]

template<typename It , typename = std::enable_if_t<std::is_same<typename std::iterator_traits<It>::iterator_category, std::random_access_iterator_tag>::value>>
CharacterIterator& retdec::fileformat::CharacterIterator< It, typename >::operator-- ( )
inline

Makes the iterator point to the previous character. Does nothing if iterator would cross the beginning.

Returns
Decremented iterator.

◆ operator--() [2/2]

template<typename It , typename = std::enable_if_t<std::is_same<typename std::iterator_traits<It>::iterator_category, std::random_access_iterator_tag>::value>>
CharacterIterator retdec::fileformat::CharacterIterator< It, typename >::operator-- ( int  )
inline

Makes the iterator point to the previous character. Does nothing if iterator would cross the beginning.

Returns
Original iterator before decrementation.

◆ operator-=()

template<typename It , typename = std::enable_if_t<std::is_same<typename std::iterator_traits<It>::iterator_category, std::random_access_iterator_tag>::value>>
CharacterIterator& retdec::fileformat::CharacterIterator< It, typename >::operator-= ( std::ptrdiff_t  diff)
inline

Moves iterator backwards by the specified amount of characters. Does not cross the end or beginning of the data.

Returns
Moved iterator.

◆ operator<()

template<typename It , typename = std::enable_if_t<std::is_same<typename std::iterator_traits<It>::iterator_category, std::random_access_iterator_tag>::value>>
bool retdec::fileformat::CharacterIterator< It, typename >::operator< ( const CharacterIterator< It, typename > &  rhs) const
inline

Checks whether one iterator is less than the other.

Returns
true if it is less, otherwise false.

◆ operator=()

template<typename It , typename = std::enable_if_t<std::is_same<typename std::iterator_traits<It>::iterator_category, std::random_access_iterator_tag>::value>>
CharacterIterator& retdec::fileformat::CharacterIterator< It, typename >::operator= ( const CharacterIterator< It, typename > &  )
default

◆ operator==()

template<typename It , typename = std::enable_if_t<std::is_same<typename std::iterator_traits<It>::iterator_category, std::random_access_iterator_tag>::value>>
bool retdec::fileformat::CharacterIterator< It, typename >::operator== ( const CharacterIterator< It, typename > &  rhs) const
inline

Checks whether iterators are equal. They are equal if and only if they point to the same element.

Returns
true if equal, otherwise false.

◆ pointsToValidCharacter() [1/2]

template<typename It , typename = std::enable_if_t<std::is_same<typename std::iterator_traits<It>::iterator_category, std::random_access_iterator_tag>::value>>
bool retdec::fileformat::CharacterIterator< It, typename >::pointsToValidCharacter ( CharacterEndianness  endian) const
inline

Checks whether the iterator points to a valid character. Character is valid if the underlying iterator points to a byte which is printable with respect to the provided endianness. In case of charStep being greater than 1, the remaining bytes must be zero. If iterator points to an end, this function always returns false.

Returns
true if points to valid character, otherwise false.

◆ pointsToValidCharacter() [2/2]

template<typename It , typename = std::enable_if_t<std::is_same<typename std::iterator_traits<It>::iterator_category, std::random_access_iterator_tag>::value>>
bool retdec::fileformat::CharacterIterator< It, typename >::pointsToValidCharacter ( const It &  charByte,
const It &  paddingFirst,
const It &  paddingLast 
) const
inlineprivate

◆ safeAdvance()

template<typename It , typename = std::enable_if_t<std::is_same<typename std::iterator_traits<It>::iterator_category, std::random_access_iterator_tag>::value>>
It retdec::fileformat::CharacterIterator< It, typename >::safeAdvance ( std::ptrdiff_t  n)
inlineprivate

Advances iterator forwards or backwards with checking of boundaries.

Parameters
nNumber of elements to advance.
Returns
Original iterator before advancing.

Member Data Documentation

◆ charStep

template<typename It , typename = std::enable_if_t<std::is_same<typename std::iterator_traits<It>::iterator_category, std::random_access_iterator_tag>::value>>
std::size_t retdec::fileformat::CharacterIterator< It, typename >::charStep
private

◆ first

template<typename It , typename = std::enable_if_t<std::is_same<typename std::iterator_traits<It>::iterator_category, std::random_access_iterator_tag>::value>>
It retdec::fileformat::CharacterIterator< It, typename >::first
private

◆ itr

template<typename It , typename = std::enable_if_t<std::is_same<typename std::iterator_traits<It>::iterator_category, std::random_access_iterator_tag>::value>>
It retdec::fileformat::CharacterIterator< It, typename >::itr
private

◆ last

template<typename It , typename = std::enable_if_t<std::is_same<typename std::iterator_traits<It>::iterator_category, std::random_access_iterator_tag>::value>>
It retdec::fileformat::CharacterIterator< It, typename >::last
private

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