ColumnTrait.h
Go to the documentation of this file.
1 //=================================================================================================
33 //=================================================================================================
34 
35 #ifndef _BLAZE_MATH_TRAITS_COLUMNTRAIT_H_
36 #define _BLAZE_MATH_TRAITS_COLUMNTRAIT_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 ColumnTrait;
60 template< typename, size_t, typename = void > struct ColumnTraitEval1;
61 template< typename, size_t, typename = void > struct ColumnTraitEval2;
63 //*************************************************************************************************
64 
65 
66 //*************************************************************************************************
68 template< size_t I, typename T >
69 auto evalColumnTrait( T& )
70  -> typename ColumnTraitEval1<T,I>::Type;
71 
72 template< typename T >
73 auto evalColumnTrait( T& )
74  -> typename ColumnTraitEval2<T,inf>::Type;
75 
76 template< size_t I, typename T >
77 auto evalColumnTrait( const T& )
78  -> typename ColumnTrait<T,I>::Type;
79 
80 template< typename T >
81 auto evalColumnTrait( const T& )
82  -> typename ColumnTrait<T>::Type;
83 
84 template< size_t I, typename T >
85 auto evalColumnTrait( const volatile T& )
86  -> typename ColumnTrait<T,I>::Type;
87 
88 template< typename T >
89 auto evalColumnTrait( const volatile T& )
90  -> typename ColumnTrait<T>::Type;
92 //*************************************************************************************************
93 
94 
95 //*************************************************************************************************
141 template< typename MT // Type of the matrix
142  , size_t... CCAs > // Compile time column arguments
144 {
145  public:
146  //**********************************************************************************************
148  using Type = decltype( evalColumnTrait<CCAs...>( std::declval<MT&>() ) );
150  //**********************************************************************************************
151 };
152 //*************************************************************************************************
153 
154 
155 //*************************************************************************************************
168 template< typename MT // Type of the matrix
169  , size_t... CCAs > // Compile time column arguments
170 using ColumnTrait_t = typename ColumnTrait<MT,CCAs...>::Type;
171 //*************************************************************************************************
172 
173 
174 //*************************************************************************************************
179 template< typename MT // Type of the matrix
180  , size_t I // Compile time column index
181  , typename > // Restricting condition
182 struct ColumnTraitEval1
183 {
184  using Type = typename ColumnTraitEval2<MT,I>::Type;
185 };
187 //*************************************************************************************************
188 
189 
190 //*************************************************************************************************
195 template< typename MT // Type of the matrix
196  , size_t I // Compile time column index
197  , typename > // Restricting condition
198 struct ColumnTraitEval2
199 {
200  using Type = INVALID_TYPE;
201 };
203 //*************************************************************************************************
204 
205 } // namespace blaze
206 
207 #endif
Header file for basic type definitions.
Base template for the ColumnTrait class.
Definition: ColumnTrait.h:143
typename ColumnTrait< MT, CCAs... >::Type ColumnTrait_t
Auxiliary alias declaration for the ColumnTrait type trait.The ColumnTrait_t alias declaration provid...
Definition: ColumnTrait.h:170
Namespace of the Blaze C++ math library.
Definition: Blaze.h:58
Numerical infinity for built-in data types.
Utility type for generic codes.