Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
std::ranges...er_iterator(3)  C++ Standard Libary std::ranges...er_iterator(3)

NAME
       std::ranges::lazy_split_view::inner_iterator			     -
       std::ranges::lazy_split_view::inner_iterator

Synopsis
	  template< bool Const >      (since C++20)
	  struct /*inner_iterator*/;  (exposition only*)

	  The return type of  lazy_split_view::outer_iterator::value_type::be-
       gin().

	  Const	matches	the template argument of outer_iterator.

Member types
	  Member type	    Definition
	  Base		    const V if Const is	true, otherwise	V
			    (exposition-only member type*)
	  iterator_concept   equivalent	 to  /*outer_iterator*/<Const>::itera-
       tor_concept, that is
	  (C++20)	     std::forward_iterator_tag	if  Base  models  for-
       ward_range, or
			    std::input_iterator_tag otherwise.
			      *	 Not  present  if  Base	 does  not  model for-
       ward_range.
			      *	std::forward_iterator_tag if
	  iterator_category		   std::iterator_traits<ranges::itera-
       tor_t<Base>>::iterator_category
	  (C++20)		 models	 std::derived_from<std::forward_itera-
       tor_tag>.
			      *		   std::iterator_traits<ranges::itera-
       tor_t<Base>>::iterator_category
				otherwise.
	  value_type	    ranges::range_value_t<Base>.
	  (C++20)
	  difference_type   ranges::range_difference_t<Base>.
	  (C++20)

	  Data members

	  Member object		 Definition
				 An iterator of	type /*outer_iterator*/<Const>
       into the
	  i_	(private)	       underlying    view    of	  the	parent
       lazy_split_view.
				 (exposition-only member object*)
				 A boolean flag	that indicates whether the op-
       erator++	was
	  incremented_ (private) invoked on this object	at least once.
				 (exposition-only member object*)

Member functions
	  constructor	  constructs an	iterator
	  (C++20)	  (public member function)
	  base		  returns the underlying iterator
	  (C++20)	  (public member function)
	  operator*	  returns the current element
	  (C++20)	  (public member function)
	  operator++	  advances the iterator
	  operator++(int) (public member function)
	  (C++20)

Member functions
       std::ranges::lazy_split_view::inner_iterator::inner_iterator

	  /*inner_iterator*/()			 =		      default;
       (1) (since C++20)
	  constexpr  explicit  /*inner_iterator*/( /*outer_iterator*/<Const> i
       (2) (since C++20)
	  );

	  1) Value initializes data member i_ via its default member  initial-
       izer (=
	  /*outer_iterator*/<Const>()).
	  2) Initializes i_ with std::move(i).

	  The  data member incremented_	is initialized with its	default	member
       initializer to
	  false.

       std::ranges::lazy_split_view::inner_iterator::base

	  constexpr const ranges::iterator_t<Base>& base() const  &  noexcept;
       (1) (since C++20)
	  constexpr	    ranges::iterator_t<Base>	     base()	    &&
       (2) (since C++20)
	      requires ranges::forward_range<V>;

	  Returns a copy of the	underlying iterator.

	  1) Copy constructs the result	from the underlying iterator.  Equiva-
       lent to return
	  i_./*cur*/();.
	  2)  Move constructs the result from the underlying iterator. Equiva-
       lent to return
	  std::move(i_./*cur*/());.

       std::ranges::lazy_split_view::inner_iterator::operator*

	  constexpr decltype(auto) operator*() const;  (since C++20)

	  Returns the element the underlying iterator points to.

	  Equivalent to	return *i_./*cur*/();.

       std::ranges::lazy_split_view::inner_iterator::operator++

	  constexpr /*inner_iterator*/&	operator++(); (1) (since C++20)
	  constexpr decltype(auto) operator++(int);   (2) (since C++20)

	  1) The function body is equivalent to
	  incremented_ = true;

	  if constexpr (!ranges::forward_range<Base>)
	  {
	      if constexpr (Pattern::size() == 0)
		  return *this;
	  }
	  ++i_./*cur*/();

	  return *this;
	  2) Equivalent	to
	  if constexpr (ranges::forward_range<Base>)

	  {
	      auto tmp = *this;
	      ++*this;
	      return tmp;
	  }
	  else
	      ++*this; // no return statement

Non-member functions
	  operator== compares the  iterators  or  the  iterator	 and  std::de-
       fault_sentinel
	  (C++20)    (function)
	  iter_move  casts the result of dereferencing the underlying iterator
       to its
	  (C++20)    associated	rvalue reference type
		     (function)
	  iter_swap  swaps the objects pointed to by two underlying iterators
	  (C++20)    (function)

       operator==(std::ranges::split_view::inner_iterator)

	  friend constexpr bool	operator==( const /*inner_iterator*/& x,

					    const  /*inner_iterator*/& y ) (1)
       (since C++20)

		requires forward_range<Base>;
	  friend constexpr bool	operator==( const /*inner_iterator*/& x,   (2)
       (since C++20)
					    std::default_sentinel_t );

	  1) Equivalent	to return x.i_./*cur*/() == y.i_./*cur*/();.
	  2) The function body is equivalent to

	auto [pcur, pend] = ranges::subrange{x.i_.parent_->pattern_};
	auto end = ranges::end(x.i_.parent_->base_);
	if constexpr (/*tiny_range*/<Pattern>)
	{
	    const auto&	cur = x.i_./*cur*/();
	    if (cur == end)
		return true;
	    if (pcur ==	pend)
		return x.incremented_;
	    return *cur	== *pcur;
	}
	else
	{
	    auto cur = x.i_./*cur*/();
	    if (cur == end)
		return true;
	    if (pcur ==	pend)
		return x.incremented_;
	    do
	    {
		if (*cur != *pcur)
		    return false;
		if (++pcur == pend)
		    return true;
	    }
	    while (++cur != end);
	    return false;
	}

	  The != operator is synthesized from operator==.

	  These	functions are not visible to ordinary unqualified or qualified
       lookup, and can
	  only be found	by argument-dependent lookup when
	  std::ranges::split_view::inner_iterator  is  an  associated class of
       the arguments.

       iter_move(std::ranges::split_view::inner_iterator)

	  friend constexpr decltype(auto) iter_move( const /*inner_iterator*/&
       i  (since
	  )
       C++20)
	      noexcept(noexcept(ranges::iter_move(i.i_./*cur*/())));

	  Equivalent to	return ranges::iter_move(i.i_./*cur*/());.

	  This function	is not visible to ordinary  unqualified	 or  qualified
       lookup, and can
	  only be found	by argument-dependent lookup when
	  std::ranges::split_view::inner_iterator  is  an  associated class of
       the arguments.

       iter_swap(std::ranges::split_view::inner_iterator)

	  friend constexpr void	iter_swap( const /*inner_iterator*/& x,

					   const   /*inner_iterator*/&	 y   )
       (since C++20)
	      noexcept(noexcept(ranges::iter_swap(x.i_.current,	     y.i_.cur-
       rent)))

	      requires std::indirectly_swappable<ranges::iterator_t<Base>>;

	  Equivalent to	ranges::iter_swap(x.i_./*cur*/(), y.i_./*cur*/()).

	  This function	is not visible to ordinary  unqualified	 or  qualified
       lookup, and can
	  only be found	by argument-dependent lookup when
	  std::ranges::split_view::inner_iterator  is  an  associated class of
       the arguments.

	  Defect reports

	  The following	behavior-changing defect reports were applied retroac-
       tively to
	  previously published C++ standards.

	     DR	      Applied	 to		   Behavior    as    published
       Correct behavior
	  LWG  3591  C++20	the && overload	of base	might invalidate outer
       constraints added
			      iterators
	  LWG  3593  C++20	 the  const&  overload	of  base   returns   a
       made noexcept
			      reference	but might not be noexcept

http://cppreference.com		  2024.06.10	  std::ranges...er_iterator(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::ranges::lazy_split_view::inner_iterator&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help