ranges.hpp Source File

ranges.hpp Source File#

Composable Kernel: ranges.hpp Source File
tile/host/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
10// ranges implementation are not intented to be used by user
11// TODO: do we need this?
12namespace ck_tile {
13
14template <typename T>
15using iter_value_t = typename std::iterator_traits<remove_cvref_t<T>>::value_type;
16
17template <typename T>
18using iter_reference_t = decltype(*std::declval<T&>());
19
20template <typename T>
21using iter_difference_t = typename std::iterator_traits<remove_cvref_t<T>>::difference_type;
22
23namespace ranges {
24template <typename R>
25using iterator_t = decltype(std::begin(std::declval<R&>()));
26
27template <typename R>
28using sentinel_t = decltype(std::end(std::declval<R&>()));
29
30template <typename R>
31using range_size_t = decltype(std::size(std::declval<R&>()));
32
33template <typename R>
35
36template <typename R>
38
39template <typename R>
41
42template <typename T, typename = void>
43struct is_range : std::false_type
44{
45};
46
47template <typename T>
48struct is_range<
49 T,
50 std::void_t<decltype(std::begin(std::declval<T&>())), decltype(std::end(std::declval<T&>()))>>
51 : std::true_type
52{
53};
54
55template <typename T>
56inline constexpr bool is_range_v = is_range<T>::value;
57
58template <typename T, typename = void>
59struct is_sized_range : std::false_type
60{
61};
62
63template <typename T>
64struct is_sized_range<T, std::void_t<decltype(std::size(std::declval<T&>()))>>
65 : std::bool_constant<is_range_v<T>>
66{
67};
68} // namespace ranges
69} // namespace ck_tile
Definition tile/host/ranges.hpp:23
decltype(std::begin(std::declval< R & >())) iterator_t
Definition tile/host/ranges.hpp:25
iter_reference_t< ranges::iterator_t< R > > range_reference_t
Definition tile/host/ranges.hpp:40
decltype(std::size(std::declval< R & >())) range_size_t
Definition tile/host/ranges.hpp:31
iter_value_t< ranges::iterator_t< R > > range_value_t
Definition tile/host/ranges.hpp:37
ck_tile::iter_difference_t< ranges::iterator_t< R > > range_difference_t
Definition tile/host/ranges.hpp:34
decltype(std::end(std::declval< R & >())) sentinel_t
Definition tile/host/ranges.hpp:28
constexpr bool is_range_v
Definition tile/host/ranges.hpp:56
Definition tile/core/algorithm/cluster_descriptor.hpp:13
typename std::iterator_traits< remove_cvref_t< T > >::value_type iter_value_t
Definition tile/host/ranges.hpp:15
decltype(*std::declval< T & >()) iter_reference_t
Definition tile/host/ranges.hpp:18
typename std::iterator_traits< remove_cvref_t< T > >::difference_type iter_difference_t
Definition tile/host/ranges.hpp:21
STL namespace.
Definition tile/host/ranges.hpp:44
Definition tile/host/ranges.hpp:60