glibmm: Glib::ustring_Iterator< T > Class Template Reference

The iterator type of Glib::ustring . More...

#include <glibmm/ustring.h>

Public Types

using iterator_category = std::bidirectional_iterator_tag
using value_type = gunichar
using difference_type = std::string::difference_type
using reference = value_type
using pointer = void

Public Member Functions

ustring_Iterator ()
ustring_Iterator (const ustring_Iterator < std::string::iterator >& other)
value_type operator* () const
ustring_Iterator < T >& operator++ ()
const ustring_Iterator < T > operator++ (int)
ustring_Iterator < T >& operator-- ()
const ustring_Iterator < T > operator-- (int)
ustring_Iterator (T pos)
T base () const

Related Functions

(Note that these are not member functions.)

bool operator== (const Glib::ustring::const_iterator & lhs, const Glib::ustring::const_iterator & rhs)
bool operator!= (const Glib::ustring::const_iterator & lhs, const Glib::ustring::const_iterator & rhs)
bool operator< (const Glib::ustring::const_iterator & lhs, const Glib::ustring::const_iterator & rhs)
bool operator> (const Glib::ustring::const_iterator & lhs, const Glib::ustring::const_iterator & rhs)
bool operator<= (const Glib::ustring::const_iterator & lhs, const Glib::ustring::const_iterator & rhs)
bool operator>= (const Glib::ustring::const_iterator & lhs, const Glib::ustring::const_iterator & rhs)

Detailed Description

template<class T>

class Glib::ustring_Iterator< T >

The iterator type of Glib::ustring .

Note this is not a random access iterator but a bidirectional one, since all index operations need to iterate over the UTF-8 data. Use std::advance() to move to a certain position. However, all of the relational operators are available: == != < > <= >=

A writeable iterator isn't provided because: The number of bytes of the old UTF-8 character and the new one to write could be different. Therefore, any write operation would invalidate all other iterators pointing into the same string.

The Glib::ustring iterated over must contain only valid UTF-8 data. If it does not, operator++() , operator--() and operator*() may make accesses outside the bounds of the string. A loop such as the following one would not stop at the end of the string.

// Bad code! Don't do this!
const char not_utf8[] = { '\x80' , '\xef' , '\x80' , '\x80' , '\xef' , '\x80' };
const Glib::ustring s(not_utf8, not_utf8 + sizeof not_utf8);
for ( Glib::ustring::const_iterator it = s.begin(); it != s.end(); ++it)
std::cout << *it << std::endl ;
Template Parameters
T std::string::iterator or std::string::const_iterator

Member Typedef Documentation

template <class T >
using Glib::ustring_Iterator < T >:: difference_type = std::string::difference_type
template <class T >
using Glib::ustring_Iterator < T >:: pointer = void
template <class T >
using Glib::ustring_Iterator < T >:: reference = value_type
template <class T >
using Glib::ustring_Iterator < T >:: value_type = gunichar

Constructor & Destructor Documentation

template <class T >
Glib::ustring_Iterator < T >:: ustring_Iterator ( )
inline
template <class T >
Glib::ustring_Iterator < T >:: ustring_Iterator ( const ustring_Iterator < std::string::iterator >& other )
inline
template <class T >
Glib::ustring_Iterator < T >:: ustring_Iterator ( T pos )
inline explicit

Member Function Documentation

template <class T >
T Glib::ustring_Iterator < T >::base ( ) const
inline
template <class T >
value_type Glib::ustring_Iterator < T >::operator* ( ) const
inline
template <class T >
ustring_Iterator <T>& Glib::ustring_Iterator < T >::operator++ ( )
inline
template <class T >
const ustring_Iterator <T> Glib::ustring_Iterator < T >::operator++ ( int )
inline
template <class T >
ustring_Iterator <T>& Glib::ustring_Iterator < T >::operator-- ( )
inline
template <class T >
const ustring_Iterator <T> Glib::ustring_Iterator < T >::operator-- ( int )
inline

Friends And Related Function Documentation

template <class T >
bool operator! = ( const Glib::ustring::const_iterator & lhs ,
const Glib::ustring::const_iterator & rhs
)
related
template <class T >
bool operator< ( const Glib::ustring::const_iterator & lhs ,
const Glib::ustring::const_iterator & rhs
)
related
template <class T >
bool operator<= ( const Glib::ustring::const_iterator & lhs ,
const Glib::ustring::const_iterator & rhs
)
related
template <class T >
bool operator== ( const Glib::ustring::const_iterator & lhs ,
const Glib::ustring::const_iterator & rhs
)
related
template <class T >
bool operator> ( const Glib::ustring::const_iterator & lhs ,
const Glib::ustring::const_iterator & rhs
)
related
template <class T >
bool operator>= ( const Glib::ustring::const_iterator & lhs ,
const Glib::ustring::const_iterator & rhs
)
related