y3c-stl 0.4.0
Friendly C++ STL wrapper with automatic stacktrace
Loading...
Searching...
No Matches
contiguous_iterator< element_type > Class Template Reference

array, vector など各種コンテナのイテレータ More...

#include <y3c/iterator.h>

Public Types

using difference_type = std::ptrdiff_t
 
using value_type = element_type
 
using pointer = element_type *
 
using reference = wrap_ref< element_type >
 
using iterator_category = std::random_access_iterator_tag
 

Public Member Functions

 contiguous_iterator (element_type *ptr, internal::life_observer observer, const std::string *type_name) noexcept
 
 contiguous_iterator (element_type *ptr, internal::life_observer observer, const std::string *type_name, bool valid, const std::string &func, internal::skip_trace_tag={})
 
template<typename T , typename std::enable_if< std::is_same< const T, element_type >::value, std::nullptr_t >::type = nullptr>
 contiguous_iterator (const contiguous_iterator< T > &other)
 
 contiguous_iterator (const contiguous_iterator &other)
 
contiguous_iteratoroperator= (const contiguous_iterator &other)
 
 ~contiguous_iterator ()=default
 
const life_observerget_observer_ () const
 
template<typename = internal::skip_trace_tag>
reference operator* () const
 
template<typename = internal::skip_trace_tag>
element_type * operator-> () const
 
template<typename = internal::skip_trace_tag>
contiguous_iteratoroperator++ ()
 
template<typename = internal::skip_trace_tag>
contiguous_iterator operator++ (int)
 
template<typename = internal::skip_trace_tag>
contiguous_iteratoroperator-- ()
 
template<typename = internal::skip_trace_tag>
contiguous_iterator operator-- (int)
 
template<typename = internal::skip_trace_tag>
contiguous_iteratoroperator+= (std::ptrdiff_t n)
 
template<typename = internal::skip_trace_tag>
contiguous_iteratoroperator-= (std::ptrdiff_t n)
 
template<typename = internal::skip_trace_tag>
contiguous_iterator operator+ (std::ptrdiff_t n) const
 
template<typename = internal::skip_trace_tag>
contiguous_iterator operator- (std::ptrdiff_t n) const
 
std::ptrdiff_t operator- (const contiguous_iterator &other) const noexcept
 
template<typename = internal::skip_trace_tag>
reference operator[] (std::ptrdiff_t n) const
 
 operator wrap< contiguous_iterator & > () noexcept
 
 operator wrap< const contiguous_iterator & > () const noexcept
 
wrap< contiguous_iterator * > operator& ()
 
wrap< const contiguous_iterator * > operator& () const
 

Friends

template<typename T >
class contiguous_iterator
 
class life_observer
 
element_type * y3c::internal::unwrap (const contiguous_iterator< element_type > &wrapper) noexcept
 

Detailed Description

template<typename element_type>
class y3c::internal::contiguous_iterator< element_type >

array, vector など各種コンテナのイテレータ

  • operator*, operator->, operator[] 時にnullptrチェックと範囲外アクセスチェックをする 使用時にnullptrでないかと範囲外でないかのチェックを行う。
  • また operator*, operator[] が返す参照はラップ済み (y3c::wrap<T&>)
  • operator& は未実装 (要るのか?)
Examples
array-iter.cc, vector-iter-erase.cc, vector-iter-reallocate.cc, and vector-iter.cc.

Member Typedef Documentation

◆ difference_type

template<typename element_type >
using difference_type = std::ptrdiff_t

◆ iterator_category

template<typename element_type >
using iterator_category = std::random_access_iterator_tag

◆ pointer

template<typename element_type >
using pointer = element_type *

◆ reference

template<typename element_type >
using reference = wrap_ref<element_type>

◆ value_type

template<typename element_type >
using value_type = element_type

Constructor & Destructor Documentation

◆ contiguous_iterator() [1/4]

template<typename element_type >
contiguous_iterator ( element_type *  ptr,
internal::life_observer  observer,
const std::string *  type_name 
)
inlinenoexcept

◆ contiguous_iterator() [2/4]

template<typename element_type >
contiguous_iterator ( element_type *  ptr,
internal::life_observer  observer,
const std::string *  type_name,
bool  valid,
const std::string &  func,
internal::skip_trace_tag  = {} 
)
inline

◆ contiguous_iterator() [3/4]

template<typename element_type >
template<typename T , typename std::enable_if< std::is_same< const T, element_type >::value, std::nullptr_t >::type = nullptr>
contiguous_iterator ( const contiguous_iterator< T > &  other)
inline

◆ contiguous_iterator() [4/4]

template<typename element_type >
contiguous_iterator ( const contiguous_iterator< element_type > &  other)
inline

◆ ~contiguous_iterator()

template<typename element_type >
~contiguous_iterator ( )
default

Member Function Documentation

◆ get_observer_()

template<typename element_type >
const life_observer & get_observer_ ( ) const
inline

◆ operator wrap< const contiguous_iterator & >()

template<typename element_type >
operator wrap< const contiguous_iterator & > ( ) const
inlinenoexcept

◆ operator wrap< contiguous_iterator & >()

template<typename element_type >
operator wrap< contiguous_iterator & > ( )
inlinenoexcept

◆ operator&() [1/2]

template<typename element_type >
wrap< contiguous_iterator * > operator& ( )
inline

◆ operator&() [2/2]

template<typename element_type >
wrap< const contiguous_iterator * > operator& ( ) const
inline

◆ operator*()

template<typename element_type >
template<typename = internal::skip_trace_tag>
reference operator* ( ) const
inline

◆ operator+()

template<typename element_type >
template<typename = internal::skip_trace_tag>
contiguous_iterator operator+ ( std::ptrdiff_t  n) const
inline

◆ operator++() [1/2]

template<typename element_type >
template<typename = internal::skip_trace_tag>
contiguous_iterator & operator++ ( )
inline

◆ operator++() [2/2]

template<typename element_type >
template<typename = internal::skip_trace_tag>
contiguous_iterator operator++ ( int  )
inline

◆ operator+=()

template<typename element_type >
template<typename = internal::skip_trace_tag>
contiguous_iterator & operator+= ( std::ptrdiff_t  n)
inline

◆ operator-() [1/2]

template<typename element_type >
std::ptrdiff_t operator- ( const contiguous_iterator< element_type > &  other) const
inlinenoexcept

◆ operator-() [2/2]

template<typename element_type >
template<typename = internal::skip_trace_tag>
contiguous_iterator operator- ( std::ptrdiff_t  n) const
inline

◆ operator--() [1/2]

template<typename element_type >
template<typename = internal::skip_trace_tag>
contiguous_iterator & operator-- ( )
inline

◆ operator--() [2/2]

template<typename element_type >
template<typename = internal::skip_trace_tag>
contiguous_iterator operator-- ( int  )
inline

◆ operator-=()

template<typename element_type >
template<typename = internal::skip_trace_tag>
contiguous_iterator & operator-= ( std::ptrdiff_t  n)
inline

◆ operator->()

template<typename element_type >
template<typename = internal::skip_trace_tag>
element_type * operator-> ( ) const
inline

◆ operator=()

template<typename element_type >
contiguous_iterator & operator= ( const contiguous_iterator< element_type > &  other)
inline

◆ operator[]()

template<typename element_type >
template<typename = internal::skip_trace_tag>
reference operator[] ( std::ptrdiff_t  n) const
inline

Friends And Related Symbol Documentation

◆ contiguous_iterator

template<typename element_type >
template<typename T >
friend class contiguous_iterator
friend

◆ life_observer

template<typename element_type >
friend class life_observer
friend

◆ y3c::internal::unwrap

template<typename element_type >
element_type * y3c::internal::unwrap ( const contiguous_iterator< element_type > &  wrapper)
friend

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