Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c++ > #81319

A container reverse-adaptor for range-based for loops

From Bonita Montero <Bonita.Montero@gmail.com>
Newsgroups comp.lang.c++
Subject A container reverse-adaptor for range-based for loops
Date 2021-09-19 11:23 +0200
Organization A noiseless patient Spider
Message-ID <si6vip$7t5$1@dont-email.me> (permalink)

Show all headers | View raw


#pragma once
#if defined(__cpp_concepts)	
	#include <concepts>

template<typename Container>
concept concept_reverser = requires( Container cont )
{
	{ cont.rbegin() } -> std::convertible_to<typename 
Container::reverse_iterator>;
	{ cont.rend()   } -> std::convertible_to<typename 
Container::reverse_iterator>;
};
#endif

template<typename Container>
#if defined(__cpp_concepts)	
	requires concept_reverser<Container>
#endif
struct reverser
{
	using iterator = typename Container::reverse_iterator;
	reverser( Container &cont );
	iterator begin();
	iterator end();
private:
	Container &m_cont;
};

template<typename Container>
#if defined(__cpp_concepts)
	requires concept_reverser<Container>
#endif
inline
reverser<Container>::reverser( Container &cont ) :
	m_cont( cont )
{
}

template<typename Container>
#if defined(__cpp_concepts)
	requires concept_reverser<Container>
#endif
inline
typename reverser<Container>::iterator reverser<Container>::begin()
{
	return m_cont.rbegin();
}

template<typename Container>
#if defined(__cpp_concepts)
	requires concept_reverser<Container>
#endif
inline
typename reverser<Container>::iterator reverser<Container>::end()
{
	return m_cont.rend();
}

Back to comp.lang.c++ | Previous | NextNext in thread | Find similar | Unroll thread


Thread

A container reverse-adaptor for range-based for loops Bonita Montero <Bonita.Montero@gmail.com> - 2021-09-19 11:23 +0200
  Re: A container reverse-adaptor for range-based for loops Bonita Montero <Bonita.Montero@gmail.com> - 2021-09-19 12:12 +0200

csiph-web