ChimeraTK-cppext 01.07.01
Loading...
Searching...
No Matches
ranges.hpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Deutsches Elektronen-Synchrotron DESY, MSK, ChimeraTK Project <chimeratk-support@desy.de>
2// SPDX-License-Identifier: LGPL-3.0-or-later
3#pragma once
4#include <ranges>
5#include <vector>
6
7namespace cppext::ranges {
8
9 /********************************************************************************************************************/
10
11 namespace detail {
12 template<template<typename...> class Container>
13 struct ToImpl : std::ranges::range_adaptor_closure<ToImpl<Container>> {
14 template<std::ranges::input_range R>
15 constexpr auto operator()(R&& r) const;
16 };
17 } // namespace detail
18
19 /********************************************************************************************************************/
20
32 template<template<typename...> class Container>
33 constexpr auto to() {
35 }
36
37 /********************************************************************************************************************/
38 /********************************************************************************************************************/
39
40 template<template<typename...> class Container>
41 template<std::ranges::input_range R>
42 constexpr auto detail::ToImpl<Container>::operator()(R&& r) const {
43 static_assert(std::is_same_v<Container<int>, std::vector<int>>, "my_ranges::to only supports std::vector for now.");
44
45 using T = std::ranges::range_value_t<R>;
47
48 if constexpr(std::ranges::sized_range<R>) {
49 result.reserve(std::ranges::size(r));
50 }
51
52 for(auto&& e : r) {
53 result.emplace_back(std::forward<decltype(e)>(e));
54 }
55
56 return result;
57 }
58
59 /********************************************************************************************************************/
60
61} // namespace cppext::ranges
constexpr auto to()
Convert a C++ range into the given Container type.
Definition ranges.hpp:33
constexpr auto operator()(R &&r) const
Definition ranges.hpp:42