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

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

Composable Kernel: /home/docs/checkouts/readthedocs.org/user_builds/advanced-micro-devices-composable-kernel/checkouts/docs-6.4.3/include/ck/utility/integral_constant.hpp Source File
integral_constant.hpp
Go to the documentation of this file.
1 // SPDX-License-Identifier: MIT
2 // Copyright (c) 2018-2025, Advanced Micro Devices, Inc. All rights reserved.
3 
4 #pragma once
5 
6 namespace ck {
7 
8 template <class T, T v>
10 {
11  static constexpr T value = v;
12  typedef T value_type;
14  __host__ __device__ constexpr operator value_type() const noexcept { return value; }
15  __host__ __device__ constexpr value_type operator()() const noexcept { return value; }
16 };
17 
18 template <typename TX, TX X, typename TY, TY Y>
19 __host__ __device__ constexpr auto operator+(integral_constant<TX, X>, integral_constant<TY, Y>)
20 {
21  return integral_constant<decltype(X + Y), X + Y>{};
22 }
23 
24 template <typename TX, TX X, typename TY, TY Y>
25 __host__ __device__ constexpr auto operator-(integral_constant<TX, X>, integral_constant<TY, Y>)
26 {
27  static_assert(Y <= X, "wrong!");
28  return integral_constant<decltype(X - Y), X - Y>{};
29 }
30 
31 template <typename TX, TX X, typename TY, TY Y>
32 __host__ __device__ constexpr auto operator*(integral_constant<TX, X>, integral_constant<TY, Y>)
33 {
34  return integral_constant<decltype(X * Y), X * Y>{};
35 }
36 
37 template <typename TX, TX X, typename TY, TY Y>
38 __host__ __device__ constexpr auto operator/(integral_constant<TX, X>, integral_constant<TY, Y>)
39 {
40  static_assert(Y > 0, "wrong!");
41  return integral_constant<decltype(X / Y), X / Y>{};
42 }
43 
44 template <typename TX, TX X, typename TY, TY Y>
45 __host__ __device__ constexpr auto operator%(integral_constant<TX, X>, integral_constant<TY, Y>)
46 {
47  static_assert(Y > 0, "wrong!");
48  return integral_constant<decltype(X % Y), X % Y>{};
49 }
50 
51 template <bool B>
53 
56 } // namespace ck
Definition: ck.hpp:264
__host__ constexpr __device__ auto operator+(const MultiIndex< NSize > &a, const T &b)
Definition: array_multi_index.hpp:50
__host__ constexpr __device__ auto operator/(integral_constant< TX, X >, integral_constant< TY, Y >)
Definition: integral_constant.hpp:38
__host__ constexpr __device__ auto operator-(const MultiIndex< NSize > &a, const T &b)
Definition: array_multi_index.hpp:60
__host__ constexpr __device__ auto operator*(const MultiIndex< NSize > &a, const T &b)
Definition: array_multi_index.hpp:70
__host__ constexpr __device__ auto operator%(integral_constant< TX, X >, integral_constant< TY, Y >)
Definition: integral_constant.hpp:45
Definition: integral_constant.hpp:10
static constexpr T value
Definition: integral_constant.hpp:11
integral_constant type
Definition: integral_constant.hpp:13
T value_type
Definition: integral_constant.hpp:12
__host__ constexpr __device__ value_type operator()() const noexcept
Definition: integral_constant.hpp:15