SubmatrixTrait.h
Go to the documentation of this file.
1 //=================================================================================================
33 //=================================================================================================
34 
35 #ifndef _BLAZE_MATH_TRAITS_SUBMATRIXTRAIT_H_
36 #define _BLAZE_MATH_TRAITS_SUBMATRIXTRAIT_H_
37 
38 
39 //*************************************************************************************************
40 // Includes
41 //*************************************************************************************************
42 
43 #include <utility>
44 #include <blaze/math/Infinity.h>
45 #include <blaze/util/InvalidType.h>
46 #include <blaze/util/Types.h>
47 
48 
49 namespace blaze {
50 
51 //=================================================================================================
52 //
53 // CLASS DEFINITION
54 //
55 //=================================================================================================
56 
57 //*************************************************************************************************
59 template< typename, size_t... > struct SubmatrixTrait;
60 template< typename, size_t, size_t, size_t, size_t, typename = void > struct SubmatrixTraitEval1;
61 template< typename, size_t, size_t, size_t, size_t, typename = void > struct SubmatrixTraitEval2;
63 //*************************************************************************************************
64 
65 
66 //*************************************************************************************************
68 template< size_t I, size_t J, size_t M, size_t N, typename T >
69 auto evalSubmatrixTrait( T& )
70  -> typename SubmatrixTraitEval1<T,I,J,M,N>::Type;
71 
72 template< typename T >
73 auto evalSubmatrixTrait( T& )
74  -> typename SubmatrixTraitEval2<T,inf,inf,inf,inf>::Type;
75 
76 template< size_t I, size_t J, size_t M, size_t N, typename T >
77 auto evalSubmatrixTrait( const T& )
78  -> typename SubmatrixTrait<T,I,J,M,N>::Type;
79 
80 template< typename T >
81 auto evalSubmatrixTrait( const T& )
82  -> typename SubmatrixTrait<T>::Type;
83 
84 template< size_t I, size_t J, size_t M, size_t N, typename T >
85 auto evalSubmatrixTrait( const volatile T& )
86  -> typename SubmatrixTrait<T,I,J,M,N>::Type;
87 
88 template< typename T >
89 auto evalSubmatrixTrait( const volatile T& )
90  -> typename SubmatrixTrait<T>::Type;
92 //*************************************************************************************************
93 
94 
95 //*************************************************************************************************
142 template< typename MT // Type of the matrix
143  , size_t... CSAs > // Compile time submatrix arguments
145 {
146  public:
147  //**********************************************************************************************
149  using Type = decltype( evalSubmatrixTrait<CSAs...>( std::declval<MT&>() ) );
151  //**********************************************************************************************
152 };
153 //*************************************************************************************************
154 
155 
156 //*************************************************************************************************
169 template< typename MT // Type of the matrix
170  , size_t... CSAs > // Compile time submatrix arguments
171 using SubmatrixTrait_t = typename SubmatrixTrait<MT,CSAs...>::Type;
172 //*************************************************************************************************
173 
174 
175 //*************************************************************************************************
180 template< typename MT // Type of the matrix
181  , size_t I // Index of the first row
182  , size_t J // Index of the first column
183  , size_t M // Number of rows
184  , size_t N // Number of columns
185  , typename > // Restricting condition
186 struct SubmatrixTraitEval1
187 {
188  public:
189  //**********************************************************************************************
190  using Type = typename SubmatrixTraitEval2<MT,I,J,M,N>::Type;
191  //**********************************************************************************************
192 };
194 //*************************************************************************************************
195 
196 
197 //*************************************************************************************************
202 template< typename MT // Type of the matrix
203  , size_t I // Index of the first row
204  , size_t J // Index of the first column
205  , size_t M // Number of rows
206  , size_t N // Number of columns
207  , typename > // Restricting condition
208 struct SubmatrixTraitEval2
209 {
210  public:
211  //**********************************************************************************************
212  using Type = INVALID_TYPE;
213  //**********************************************************************************************
214 };
216 //*************************************************************************************************
217 
218 } // namespace blaze
219 
220 #endif
Header file for basic type definitions.
Base template for the SubmatrixTrait class.
Definition: SubmatrixTrait.h:144
typename SubmatrixTrait< MT, CSAs... >::Type SubmatrixTrait_t
Auxiliary alias declaration for the SubmatrixTrait type trait.The SubmatrixTrait_t alias declaration ...
Definition: SubmatrixTrait.h:171
Namespace of the Blaze C++ math library.
Definition: Blaze.h:58
Numerical infinity for built-in data types.
Utility type for generic codes.