Blaze 3.9
RepeatTrait.h
Go to the documentation of this file.
1//=================================================================================================
33//=================================================================================================
34
35#ifndef _BLAZE_MATH_TRAITS_REPEATTRAIT_H_
36#define _BLAZE_MATH_TRAITS_REPEATTRAIT_H_
37
38
39//*************************************************************************************************
40// Includes
41//*************************************************************************************************
42
43#include <utility>
44#include <blaze/math/Infinity.h>
45#include <blaze/util/Types.h>
46
47
48namespace blaze {
49
50//=================================================================================================
51//
52// CLASS DEFINITION
53//
54//=================================================================================================
55
56//*************************************************************************************************
58template< typename, size_t... > struct RepeatTrait;
59template< typename, size_t, size_t, size_t, typename = void > struct RepeatTraitEval1;
60template< typename, size_t, size_t, size_t, typename = void > struct RepeatTraitEval2;
62//*************************************************************************************************
63
64
65//*************************************************************************************************
67template< size_t R0, size_t R1, size_t R2, typename T >
68auto evalRepeatTrait( const volatile T& ) -> RepeatTraitEval1<T,R0,R1,R2>;
69
70template< size_t R0, size_t R1, typename T >
71auto evalRepeatTrait( const volatile T& ) -> RepeatTraitEval1<T,R0,R1,inf>;
72
73template< size_t R0, typename T >
74auto evalRepeatTrait( const volatile T& ) -> RepeatTraitEval1<T,R0,inf,inf>;
75
76template< typename T >
77auto evalRepeatTrait( const volatile T& ) -> RepeatTraitEval1<T,inf,inf,inf>;
79//*************************************************************************************************
80
81
82//*************************************************************************************************
128template< typename T // Type of the operand
129 , size_t... CRAs > // Compile time repetition arguments
131 : public decltype( evalRepeatTrait<CRAs...>( std::declval<T&>() ) )
132{};
133//*************************************************************************************************
134
135
136//*************************************************************************************************
149template< typename T // Type of the operand
150 , size_t... CRAs > // Compile time repeater arguments
151using RepeatTrait_t = typename RepeatTrait<T,CRAs...>::Type;
152//*************************************************************************************************
153
154
155//*************************************************************************************************
160template< typename T // Type of the operand
161 , size_t R0 // Number of repetitions in the first dimension
162 , size_t R1 // Number of repetitions in the second dimension
163 , size_t R2 // Number of repetitions in the third dimension
164 , typename > // Restricting condition
165struct RepeatTraitEval1
166 : public RepeatTraitEval2<T,R0,R1,R2>
167{};
169//*************************************************************************************************
170
171
172//*************************************************************************************************
177template< typename T // Type of the operand
178 , size_t R0 // Number of repetitions in the first dimension
179 , size_t R1 // Number of repetitions in the second dimension
180 , size_t R2 // Number of repetitions in the third dimension
181 , typename > // Restricting condition
182struct RepeatTraitEval2
183{};
185//*************************************************************************************************
186
187} // namespace blaze
188
189#endif
Numerical infinity for built-in data types.
typename RepeatTrait< T, CRAs... >::Type RepeatTrait_t
Auxiliary alias declaration for the RepeatTrait type trait.
Definition: RepeatTrait.h:151
Base template for the RepeatTrait class.
Definition: RepeatTrait.h:132
Header file for basic type definitions.