DDC 0.0.0

a discrete domain computation library

reducer.hpp
1// Copyright (C) The DDC development team, see COPYRIGHT.md file
2//
3// SPDX-License-Identifier: MIT
4
5#pragma once
6
7#include <utility>
8
9#include <Kokkos_Core.hpp>
10
11namespace ddc::reducer {
12
13template <class T>
14struct sum
15{
16 using value_type = T;
17
19 const noexcept
20 {
21 return lhs + rhs;
22 }
23};
24
25template <class T>
26struct prod
27{
28 using value_type = T;
29
31 const noexcept
32 {
33 return lhs * rhs;
34 }
35};
36
37struct land
38{
40
42 const noexcept
43 {
44 return lhs && rhs;
45 }
46};
47
48struct lor
49{
51
53 const noexcept
54 {
55 return lhs || rhs;
56 }
57};
58
59template <class T>
60struct band
61{
62 using value_type = T;
63
65 const noexcept
66 {
67 return lhs & rhs;
68 }
69};
70
71template <class T>
72struct bor
73{
74 using value_type = T;
75
77 const noexcept
78 {
79 return lhs | rhs;
80 }
81};
82
83template <class T>
84struct bxor
85{
86 using value_type = T;
87
89 const noexcept
90 {
91 return lhs ^ rhs;
92 }
93};
94
95template <class T>
96struct min
97{
98 using value_type = T;
99
101 const noexcept
102 {
103 return lhs < rhs ? lhs : rhs;
104 }
105};
106
107template <class T>
108struct max
109{
110 using value_type = T;
111
113 const noexcept
114 {
115 return lhs > rhs ? lhs : rhs;
116 }
117};
118
119template <class T>
120struct minmax
121{
122 using value_type = std::pair<T, T>;
123
125 const noexcept
126 {
127 return value_type(
128 lhs.first < rhs.first ? lhs.first : rhs.first,
129 lhs.second > rhs.second ? lhs.second : rhs.second);
130 }
131};
132
133} // namespace ddc::reducer
Definition reducer.hpp:11
constexpr bool enable_chunk
Definition chunk_traits.hpp:16
Definition reducer.hpp:61
KOKKOS_FUNCTION constexpr value_type operator()(value_type const &lhs, value_type const &rhs) const noexcept
Definition reducer.hpp:64
T value_type
Definition reducer.hpp:62
Definition reducer.hpp:73
T value_type
Definition reducer.hpp:74
KOKKOS_FUNCTION constexpr value_type operator()(value_type const &lhs, value_type const &rhs) const noexcept
Definition reducer.hpp:76
Definition reducer.hpp:85
T value_type
Definition reducer.hpp:86
KOKKOS_FUNCTION constexpr value_type operator()(value_type const &lhs, value_type const &rhs) const noexcept
Definition reducer.hpp:88
Definition reducer.hpp:38
KOKKOS_FUNCTION constexpr value_type operator()(value_type const &lhs, value_type const &rhs) const noexcept
Definition reducer.hpp:41
bool value_type
Definition reducer.hpp:39
Definition reducer.hpp:49
KOKKOS_FUNCTION constexpr value_type operator()(value_type const &lhs, value_type const &rhs) const noexcept
Definition reducer.hpp:52
bool value_type
Definition reducer.hpp:50
Definition reducer.hpp:109
T value_type
Definition reducer.hpp:110
KOKKOS_FUNCTION constexpr value_type operator()(value_type const &lhs, value_type const &rhs) const noexcept
Definition reducer.hpp:112
Definition reducer.hpp:97
T value_type
Definition reducer.hpp:98
KOKKOS_FUNCTION constexpr value_type operator()(value_type const &lhs, value_type const &rhs) const noexcept
Definition reducer.hpp:100
Definition reducer.hpp:121
KOKKOS_FUNCTION constexpr value_type operator()(value_type const &lhs, value_type const &rhs) const noexcept
Definition reducer.hpp:124
std::pair< T, T > value_type
Definition reducer.hpp:122
Definition reducer.hpp:27
KOKKOS_FUNCTION constexpr value_type operator()(value_type const &lhs, value_type const &rhs) const noexcept
Definition reducer.hpp:30
T value_type
Definition reducer.hpp:28
Definition reducer.hpp:15
KOKKOS_FUNCTION constexpr value_type operator()(value_type const &lhs, value_type const &rhs) const noexcept
Definition reducer.hpp:18
T value_type
Definition reducer.hpp:16