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

FreeBSD Manual Pages

  
 
  

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

NAME
       std::ranges::owning_view	- std::ranges::owning_view

Synopsis
	  Defined in header <ranges>
	  template< ranges::range R >

	      requires	  std::movable<R>   &&	 (!/*is-initializer-list*/<R>)
       (since C++20)
	  class	owning_view

	      :	public ranges::view_interface<owning_view<R>>

	  owning_view is a view	that has unique	ownership of a	range.	It  is
       move-only and
	  stores that range within it.

	  The  constant	 /*is-initializer-list*/<R>  in	the requires-clause is
       true if and only
	  if  std::remove_cvref_t<R>  is  a  specialization  of	 std::initial-
       izer_list.

Member functions
	  constructor	 constructs  an	 owning_view  by value-initializing or
       move-constructing
	  (C++20)	the stored range
			(public	member function)
	  operator=	move-assigns the stored	range
	  (C++20)	(public	member function)
	  base		returns	a reference to the stored range
	  (C++20)	(public	member function)
	  begin		returns	the beginning iterator of the stored range
	  (C++20)	(public	member function)
	  end		returns	the sentinel of	the stored range
	  (C++20)	(public	member function)
	  empty		checks whether the stored range	is empty
	  (C++20)	(public	member function)
	  size		returns	the size of the	stored sized_range
	  (C++20)	(public	member function)
	  data		returns	the pointer to the  beginning  of  the	stored
       contiguous_range
	  (C++20)	(public	member function)
		Inherited from std::ranges::view_interface
	  cbegin	 returns  a  constant iterator to the beginning	of the
       range.
	  (C++23)	(public	member	function  of  std::ranges::view_inter-
       face<D>)
	  cend		 returns  a  sentinel for the constant iterator	of the
       range.
	  (C++23)	(public	member	function  of  std::ranges::view_inter-
       face<D>)
	  operator  bool  returns  whether the derived view is not empty. Pro-
       vided if
	  (C++20)	ranges::empty is applicable to it.
			(public	member	function  of  std::ranges::view_inter-
       face<D>)
	  front		 returns  the  first element in	the derived view. Pro-
       vided if	it
	  (C++20)	satisfies forward_range.
			(public	member	function  of  std::ranges::view_inter-
       face<D>)
	  back		returns	the last element in the	derived	view. Provided
       if it satisfies
	  (C++20)	bidirectional_range and	common_range.
			(public	 member	 function  of std::ranges::view_inter-
       face<D>)
	  operator[]	returns	the n^th element in the	derived	view. Provided
       if it satisfies
	  (C++20)	random_access_range.
			(public	member	function  of  std::ranges::view_inter-
       face<D>)

       std::ranges::owning_view::owning_view

	  owning_view()	 requires std::default_initializable<R>	= default; (1)
       (since C++20)
	  owning_view( owning_view&& other ) = default;			   (2)
       (since C++20)
	  constexpr  owning_view( R&& t	);				   (3)
       (since C++20)
	  owning_view( const owning_view& ) = delete;			   (4)
       (since C++20)

	  1)  Default  constructor.  Value-initializes the stored range	by its
       default member
	  initializer (= R()).
	  2) Move constructor. Move constructs the stored range	from  that  of
       other.
	  3) Move constructs the stored	range from t.
	  4) Copy constructor is deleted. owning_view is move-only.

Parameters
	  other	- another owning_view to move from
	  t	- range	to move	from

       std::ranges::owning_view::operator=

	  owning_view&	operator=( owning_view&& other ) = default; (1)	(since
       C++20)
	  owning_view& operator=( const	owning_view& ) = delete;   (2)	(since
       C++20)

	  1) Move assignment operator. Move assigns the	stored range from that
       of other.
	  2) Copy assignment operator is deleted. owning_view is move-only.

Parameters
	  other	- another owning_view to move from

Return value
	  *this

       std::ranges::owning_view::base

	  constexpr R& base() &	noexcept;		(1) (since C++20)
	  constexpr const R& base() const & noexcept;	(2) (since C++20)
	  constexpr R&&	base() && noexcept;		(3) (since C++20)
	  constexpr const R&& base() const && noexcept;	(4) (since C++20)

	  Returns a reference to the stored range, keeping value category and
	  const-qualification.

	  1,2) Equivalent to return r_;.
	  3,4) Equivalent to return std::move(r_);.

       std::ranges::owning_view::begin

	  constexpr  ranges::iterator_t<R>  begin();			   (1)
       (since C++20)
	  constexpr auto begin() const requires	 ranges::range<const  R>;  (2)
       (since C++20)

	  Equivalent to	return ranges::begin(r_);.

       std::ranges::owning_view::end

	  constexpr   ranges::sentinel_t<R>   end();			   (1)
       (since C++20)
	  constexpr auto end()	const  requires	 ranges::range<const  R>;  (2)
       (since C++20)

	  Equivalent to	return ranges::end(r_);.

       std::ranges::owning_view::empty

	  constexpr  bool  empty()  requires  requires { ranges::empty(r_); };
       (1) (since C++20)
	  constexpr    bool    empty()	  const	   requires	requires     {
       (2) (since C++20)
	  ranges::empty(r_); };

	  Equivalent to	return ranges::empty(r_);.

       std::ranges::owning_view::size

	  constexpr	auto	 size()	   requires    ranges::sized_range<R>;
       (1) (since C++20)
	  constexpr auto size()	const requires	ranges::sized_range<const  R>;
       (2) (since C++20)

	  Equivalent to	return ranges::size(r_);.

       std::ranges::owning_view::data

	  constexpr    auto   data()   requires	  ranges::contiguous_range<R>;
       (1) (since C++20)
	  constexpr	    auto	 data()		const	      requires
       (2) (since C++20)
	  ranges::contiguous_range<const R>;

	  Equivalent to	return ranges::data(r_);.

	  Helper templates

	  template< class T >

	  inline			 constexpr			  bool
       (since C++20)
	  enable_borrowed_range<std::ranges::owning_view<T>> =

	      std::ranges::enable_borrowed_range<T>;

	  This specialization of std::ranges::enable_borrowed_range makes own-
       ing_view	satisfy
	  borrowed_range when the underlying range satisfies it.

Example
       // Run this code

	#include <cassert>
	#include <iostream>
	#include <ranges>
	#include <string>

	int main()
	{
	    using namespace std::literals;
	    std::ranges::owning_view ov{"cosmos"s}; // the deduced type	 of  R
       is std::string;
						    //	`ov` is	the only owner
       of this string
	    assert(
		ov.empty() == false &&
		ov.size() == 6 &&
		ov.size() == ov.base().size() &&
		ov.front() == 'c' &&
		ov.front() == *ov.begin() &&
		ov.back() == 's' &&
		ov.back() == *(ov.end()	- 1) &&
		ov.data() == ov.base()
	    );

	    std::cout << "sizeof(ov): "	<< sizeof  ov  <<  '\n'	 //  typically
       equal to	sizeof(R)
		      << "range-for: ";
	    for	(const char ch : ov)
		std::cout << ch;
	    std::cout << '\n';

	    std::ranges::owning_view<std::string> ov2;
	    assert(ov2.empty());
	//   ov2  =  ov;  //  compile-time  error: copy	assignment operator is
       deleted
	    ov2	= std::move(ov); // OK
	    assert(ov2.size() == 6);
	}

Possible output:
	sizeof(ov): 32
	range-for: cosmos

See also
	  ranges::ref_view a view of the elements of some other	range
	  (C++20)	   (class template)
	  views::all_t	   a view that includes	all elements of	a range
	  views::all	   (alias template) (range adaptor object)
	  (C++20)

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

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

home | help