ranges.hpp Source File

ranges.hpp Source File#

Composable Kernel: ranges.hpp Source File
library/utility/ranges.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: MIT
2// Copyright (c) 2018-2023, Advanced Micro Devices, Inc. All rights reserved.
3
4#pragma once
5
6#include <iterator>
7#include <type_traits>
8#include <utility>
9
11
12namespace ck {
13namespace ranges {
14
15template <typename R>
16using iterator_t = decltype(std::begin(std::declval<R&>()));
17
18template <typename R>
19using sentinel_t = decltype(std::end(std::declval<R&>()));
20
21template <typename R>
22using range_size_t = decltype(std::size(std::declval<R&>()));
23
24template <typename R>
26
27template <typename R>
29
30template <typename R>
32
33template <typename T, typename = void>
34struct is_range : std::false_type
35{
36};
37
38template <typename T>
39struct is_range<
40 T,
41 std::void_t<decltype(std::begin(std::declval<T&>())), decltype(std::end(std::declval<T&>()))>>
42 : std::true_type
43{
44};
45
46template <typename T>
47inline constexpr bool is_range_v = is_range<T>::value;
48
49template <typename T, typename = void>
50struct is_sized_range : std::false_type
51{
52};
53
54template <typename T>
55struct is_sized_range<T, std::void_t<decltype(std::size(std::declval<T&>()))>>
56 : std::bool_constant<is_range_v<T>>
57{
58};
59} // namespace ranges
60} // namespace ck
Definition algorithm.hpp:12
ck::iter_difference_t< ranges::iterator_t< R > > range_difference_t
Definition library/utility/ranges.hpp:25
decltype(std::size(std::declval< R & >())) range_size_t
Definition library/utility/ranges.hpp:22
decltype(std::begin(std::declval< R & >())) iterator_t
Definition library/utility/ranges.hpp:16
iter_reference_t< ranges::iterator_t< R > > range_reference_t
Definition library/utility/ranges.hpp:31
decltype(std::end(std::declval< R & >())) sentinel_t
Definition library/utility/ranges.hpp:19
constexpr bool is_range_v
Definition library/utility/ranges.hpp:47
iter_value_t< ranges::iterator_t< R > > range_value_t
Definition library/utility/ranges.hpp:28
Definition ck.hpp:268
typename std::iterator_traits< remove_cvref_t< T > >::difference_type iter_difference_t
Definition iterator.hpp:20
typename std::iterator_traits< remove_cvref_t< T > >::value_type iter_value_t
Definition iterator.hpp:14
decltype(*std::declval< T & >()) iter_reference_t
Definition iterator.hpp:17
STL namespace.
Definition library/utility/ranges.hpp:35
Definition library/utility/ranges.hpp:51