IsSMPAssignable.h
Go to the documentation of this file.
1 //=================================================================================================
33 //=================================================================================================
34 
35 #ifndef _BLAZE_MATH_TYPETRAITS_ISSMPASSIGNABLE_H_
36 #define _BLAZE_MATH_TYPETRAITS_ISSMPASSIGNABLE_H_
37 
38 
39 //*************************************************************************************************
40 // Includes
41 //*************************************************************************************************
42 
45 #include <blaze/util/FalseType.h>
46 #include <blaze/util/mpl/If.h>
47 #include <blaze/util/mpl/Or.h>
48 #include <blaze/util/TrueType.h>
49 
50 
51 namespace blaze {
52 
53 //=================================================================================================
54 //
55 // CLASS DEFINITION
56 //
57 //=================================================================================================
58 
59 //*************************************************************************************************
64 template< typename T >
65 struct IsSMPAssignableHelper
66 {
67  private:
68  //**struct HasNestedMember**********************************************************************
69  template< typename T2 >
70  struct UseNestedMember { enum { value = T2::smpAssignable }; };
71  //**********************************************************************************************
72 
73  //**struct NoNestedMember***********************************************************************
74  template< typename T2 >
75  struct NotSMPAssignable { enum { value = 0 }; };
76  //**********************************************************************************************
77 
78  public:
79  //**********************************************************************************************
80  enum { value = If< Or< IsVector<T>, IsMatrix<T> >
81  , UseNestedMember<T>
82  , NotSMPAssignable<T>
83  >::Type::value };
84  typedef typename IfTrue<value,TrueType,FalseType>::Type Type;
85  //**********************************************************************************************
86 };
88 //*************************************************************************************************
89 
90 
91 //*************************************************************************************************
119 template< typename T >
120 struct IsSMPAssignable : public IsSMPAssignableHelper<T>::Type
121 {
122  public:
123  //**********************************************************************************************
125  enum { value = IsSMPAssignableHelper<T>::value };
126  typedef typename IsSMPAssignableHelper<T>::Type Type;
128  //**********************************************************************************************
129 };
130 //*************************************************************************************************
131 
132 } // namespace blaze
133 
134 #endif
Header file for the FalseType type/value trait base class.
Header file for the IsMatrix type trait.
Namespace of the Blaze C++ math library.
Definition: Blaze.h:57
Header file for the If class template.
Header file for the Or class template.
Compile time check for data types.This type trait tests whether or not the given template parameter i...
Definition: IsSMPAssignable.h:120
Header file for the IsVector type trait.
Header file for the TrueType type/value trait base class.