Blaze 3.9
Div.h
Go to the documentation of this file.
1//=================================================================================================
33//=================================================================================================
34
35#ifndef _BLAZE_MATH_FUNCTORS_DIV_H_
36#define _BLAZE_MATH_FUNCTORS_DIV_H_
37
38
39//*************************************************************************************************
40// Includes
41//*************************************************************************************************
42
43#include <utility>
45#include <blaze/math/simd/Div.h>
64#include <blaze/system/Inline.h>
66
67
68namespace blaze {
69
70//=================================================================================================
71//
72// CLASS DEFINITION
73//
74//=================================================================================================
75
76//*************************************************************************************************
80struct Div
81{
82 //**********************************************************************************************
89 template< typename T1, typename T2 >
90 BLAZE_ALWAYS_INLINE BLAZE_DEVICE_CALLABLE decltype(auto) operator()( T1&& a, T2&& b ) const
91 {
92 return std::forward<T1>( a ) / std::forward<T2>( b );
93 }
94 //**********************************************************************************************
95
96 //**********************************************************************************************
101 template< typename T1, typename T2 >
102 static constexpr bool simdEnabled() { return HasSIMDDiv_v<T1,T2>; }
103 //**********************************************************************************************
104
105 //**********************************************************************************************
110 static constexpr bool paddingEnabled() { return false; }
111 //**********************************************************************************************
112
113 //**********************************************************************************************
120 template< typename T1, typename T2 >
121 BLAZE_ALWAYS_INLINE decltype(auto) load( const T1& a, const T2& b ) const
122 {
125 return a / b;
126 }
127 //**********************************************************************************************
128};
129//*************************************************************************************************
130
131
132
133
134//=================================================================================================
135//
136// YIELDSUNIFORM SPECIALIZATIONS
137//
138//=================================================================================================
139
140//*************************************************************************************************
142template< typename T1, typename T2 >
143struct YieldsUniform<Div,T1,T2>
144 : public BoolConstant< IsUniform_v<T1> && IsUniform_v<T2> >
145{};
147//*************************************************************************************************
148
149
150
151
152//=================================================================================================
153//
154// YIELDSSYMMETRIC SPECIALIZATIONS
155//
156//=================================================================================================
157
158//*************************************************************************************************
160template< typename MT1, typename MT2 >
161struct YieldsSymmetric<Div,MT1,MT2>
162 : public BoolConstant< IsSymmetric_v<MT1> && IsSymmetric_v<MT2> >
163{};
165//*************************************************************************************************
166
167
168
169
170//=================================================================================================
171//
172// YIELDSHERMITIAN SPECIALIZATIONS
173//
174//=================================================================================================
175
176//*************************************************************************************************
178template< typename MT1, typename MT2 >
179struct YieldsHermitian<Div,MT1,MT2>
180 : public BoolConstant< IsHermitian_v<MT1> && IsHermitian_v<MT2> >
181{};
183//*************************************************************************************************
184
185
186
187
188//=================================================================================================
189//
190// YIELDSLOWER SPECIALIZATIONS
191//
192//=================================================================================================
193
194//*************************************************************************************************
196template< typename MT1, typename MT2 >
197struct YieldsLower<Div,MT1,MT2>
198 : public BoolConstant< IsLower_v<MT1> >
199{};
201//*************************************************************************************************
202
203
204
205
206//=================================================================================================
207//
208// YIELDSSTRICTLYLOWER SPECIALIZATIONS
209//
210//=================================================================================================
211
212//*************************************************************************************************
214template< typename MT1, typename MT2 >
215struct YieldsStrictlyLower<Div,MT1,MT2>
216 : public BoolConstant< IsStrictlyLower_v<MT1> >
217{};
219//*************************************************************************************************
220
221
222
223
224//=================================================================================================
225//
226// YIELDSUPPER SPECIALIZATIONS
227//
228//=================================================================================================
229
230//*************************************************************************************************
232template< typename MT1, typename MT2 >
233struct YieldsUpper<Div,MT1,MT2>
234 : public BoolConstant< IsUpper_v<MT1> >
235{};
237//*************************************************************************************************
238
239
240
241
242//=================================================================================================
243//
244// YIELDSSTRICTLYUPPER SPECIALIZATIONS
245//
246//=================================================================================================
247
248//*************************************************************************************************
250template< typename MT1, typename MT2 >
251struct YieldsStrictlyUpper<Div,MT1,MT2>
252 : public BoolConstant< IsStrictlyUpper_v<MT1> >
253{};
255//*************************************************************************************************
256
257
258
259
260//=================================================================================================
261//
262// YIELDSZERO SPECIALIZATIONS
263//
264//=================================================================================================
265
266//*************************************************************************************************
268template< typename T1, typename T2 >
269struct YieldsZero<Div,T1,T2>
270 : public BoolConstant< IsZero_v<T1> >
271{};
273//*************************************************************************************************
274
275} // namespace blaze
276
277#endif
Header file for the HasSIMDDiv type trait.
Macro for CUDA compatibility.
Header file for the IntegralConstant class template.
Header file for the IsHermitian type trait.
Header file for the IsLower type trait.
Header file for the IsStrictlyLower type trait.
Header file for the IsStrictlyUpper type trait.
Header file for the IsSymmetric type trait.
Header file for the IsUniform type trait.
Header file for the IsUpper type trait.
Header file for the YieldsHermitian type trait.
Header file for the YieldsLower type trait.
Header file for the YieldsStrictlyLower type trait.
Header file for the YieldsStrictlyUpper type trait.
Header file for the YieldsSymmetric type trait.
Header file for the YieldsUniform type trait.
Header file for the YieldsUpper type trait.
Header file for the YieldsZero type trait.
Constraint on the data type.
#define BLAZE_CONSTRAINT_MUST_BE_SIMD_PACK(T)
Constraint on the data type.
Definition: SIMDPack.h:60
#define BLAZE_ALWAYS_INLINE
Platform dependent setup of an enforced inline keyword.
Definition: Inline.h:85
#define BLAZE_DEVICE_CALLABLE
Conditional macro that sets host and device attributes when compiled with CUDA.
Definition: HostDevice.h:94
IntegralConstant< bool, B > BoolConstant
Generic wrapper for a compile time constant boolean value.
Definition: IntegralConstant.h:110
Header file for the SIMD division functionality.
Generic wrapper for the division operator.
Definition: Div.h:81
static constexpr bool simdEnabled()
Returns whether SIMD is enabled for the specified data types T1 and T2.
Definition: Div.h:102
BLAZE_ALWAYS_INLINE decltype(auto) load(const T1 &a, const T2 &b) const
Returns the result of the division operation for the given SIMD vectors.
Definition: Div.h:121
static constexpr bool paddingEnabled()
Returns whether the operation supports padding, i.e. whether it can deal with zeros.
Definition: Div.h:110
System settings for the inline keywords.
Header file for the IsZero type trait.