/home/docs/checkouts/readthedocs.org/user_builds/advanced-micro-devices-composable-kernel/checkouts/develop/include/ck_tile/host/ranges.hpp Source File

/home/docs/checkouts/readthedocs.org/user_builds/advanced-micro-devices-composable-kernel/checkouts/develop/include/ck_tile/host/ranges.hpp Source File#

Composable Kernel: /home/docs/checkouts/readthedocs.org/user_builds/advanced-micro-devices-composable-kernel/checkouts/develop/include/ck_tile/host/ranges.hpp Source File
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?
12 namespace ck_tile {
13 
14 template <typename T>
15 using iter_value_t = typename std::iterator_traits<remove_cvref_t<T>>::value_type;
16 
17 template <typename T>
18 using iter_reference_t = decltype(*std::declval<T&>());
19 
20 template <typename T>
21 using iter_difference_t = typename std::iterator_traits<remove_cvref_t<T>>::difference_type;
22 
23 namespace ranges {
24 template <typename R>
25 using iterator_t = decltype(std::begin(std::declval<R&>()));
26 
27 template <typename R>
28 using sentinel_t = decltype(std::end(std::declval<R&>()));
29 
30 template <typename R>
31 using range_size_t = decltype(std::size(std::declval<R&>()));
32 
33 template <typename R>
35 
36 template <typename R>
38 
39 template <typename R>
41 
42 template <typename T, typename = void>
44 {
45 };
46 
47 template <typename T>
48 struct is_range<
49  T,
50  std::void_t<decltype(std::begin(std::declval<T&>())), decltype(std::end(std::declval<T&>()))>>
52 {
53 };
54 
55 template <typename T>
56 inline constexpr bool is_range_v = is_range<T>::value;
57 
58 template <typename T, typename = void>
60 {
61 };
62 
63 template <typename T>
64 struct 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
ck_tile::iter_difference_t< ranges::iterator_t< R > > range_difference_t
Definition: ranges.hpp:34
iter_reference_t< ranges::iterator_t< R > > range_reference_t
Definition: ranges.hpp:40
decltype(std::end(std::declval< R & >())) sentinel_t
Definition: ranges.hpp:28
decltype(std::begin(std::declval< R & >())) iterator_t
Definition: ranges.hpp:25
decltype(std::size(std::declval< R & >())) range_size_t
Definition: ranges.hpp:31
iter_value_t< ranges::iterator_t< R > > range_value_t
Definition: ranges.hpp:37
constexpr bool is_range_v
Definition: ranges.hpp:56
Definition: cluster_descriptor.hpp:13
typename std::iterator_traits< remove_cvref_t< T > >::value_type iter_value_t
Definition: ranges.hpp:15
decltype(*std::declval< T & >()) iter_reference_t
Definition: ranges.hpp:18
typename std::iterator_traits< remove_cvref_t< T > >::difference_type iter_difference_t
Definition: ranges.hpp:21
integral_constant< bool, B > bool_constant
Definition: integral_constant.hpp:60
bool_constant< false > false_type
Definition: integral_constant.hpp:63
bool_constant< true > true_type
Definition: integral_constant.hpp:62
Definition: ranges.hpp:44
Definition: ranges.hpp:60