/home/docs/checkouts/readthedocs.org/user_builds/advanced-micro-devices-composable-kernel/checkouts/docs-6.4.3/include/ck/library/utility/ranges.hpp Source File

/home/docs/checkouts/readthedocs.org/user_builds/advanced-micro-devices-composable-kernel/checkouts/docs-6.4.3/include/ck/library/utility/ranges.hpp Source File#

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