All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
IsPowerOf.h
Go to the documentation of this file.
1 //=================================================================================================
33 //=================================================================================================
34 
35 #ifndef _BLAZE_UTIL_VALUETRAITS_ISPOWEROF_H_
36 #define _BLAZE_UTIL_VALUETRAITS_ISPOWEROF_H_
37 
38 
39 //*************************************************************************************************
40 // Includes
41 //*************************************************************************************************
42 
43 #include <blaze/util/FalseType.h>
44 #include <blaze/util/SelectType.h>
45 #include <blaze/util/TrueType.h>
46 
47 
48 namespace blaze {
49 
50 //=================================================================================================
51 //
52 // CLASS DEFINITION
53 //
54 //=================================================================================================
55 
56 //*************************************************************************************************
79 template< size_t B, size_t N >
80 struct IsPowerOf : public SelectType<N%B,FalseType,typename IsPowerOf<B,N/B>::Type>::Type
81 {
82  public:
83  //**********************************************************************************************
85  enum { value = ( N%B )?( 0 ):( IsPowerOf<B,N/B>::value ) };
86  typedef typename SelectType<N%B,FalseType,typename IsPowerOf<B,N/B>::Type>::Type Type;
88  //**********************************************************************************************
89 };
90 //*************************************************************************************************
91 
92 
93 //*************************************************************************************************
103 template< size_t N >
104 struct IsPowerOf<2,N> : public SelectType<N&(N-1),FalseType,TrueType>::Type
105 {
106  public:
107  //**********************************************************************************************
108  enum { value = ( N&(N-1) )?( 0 ):( 1 ) };
109  typedef typename SelectType<N&(N-1),FalseType,TrueType>::Type Type;
110  //**********************************************************************************************
111 };
113 //*************************************************************************************************
114 
115 
116 //*************************************************************************************************
125 template<>
126 struct IsPowerOf<2,0> : public FalseType
127 {
128  public:
129  //**********************************************************************************************
130  enum { value = 0 };
131  typedef FalseType Type;
132  //**********************************************************************************************
133 };
135 //*************************************************************************************************
136 
137 
138 //*************************************************************************************************
148 template< size_t B >
149 struct IsPowerOf<B,1> : public TrueType
150 {
151  public:
152  //**********************************************************************************************
153  enum { value = 1 };
154  typedef TrueType Type;
155  //**********************************************************************************************
156 };
158 //*************************************************************************************************
159 
160 
161 //*************************************************************************************************
171 template< size_t N >
172 struct IsPowerOf<1,N> : public FalseType
173 {
174  public:
175  //**********************************************************************************************
176  enum { value = 0 };
177  typedef FalseType Type;
178  //**********************************************************************************************
179 };
181 //*************************************************************************************************
182 
183 
184 //*************************************************************************************************
194 template<>
195 struct IsPowerOf<1,1> : public TrueType
196 {
197  public:
198  //**********************************************************************************************
199  enum { value = 1 };
200  typedef TrueType Type;
201  //**********************************************************************************************
202 };
204 //*************************************************************************************************
205 
206 
207 //*************************************************************************************************
217 template< size_t B >
218 struct IsPowerOf<B,0> : public FalseType
219 {
220  public:
221  //**********************************************************************************************
222  enum { value = 0 };
223  typedef FalseType Type;
224  //**********************************************************************************************
225 };
227 //*************************************************************************************************
228 
229 
230 //*************************************************************************************************
240 template< size_t N >
241 struct IsPowerOf<0,N> : public FalseType
242 {
243  public:
244  //**********************************************************************************************
245  enum { value = 0 };
246  typedef FalseType Type;
247  //**********************************************************************************************
248 };
250 //*************************************************************************************************
251 
252 
253 //*************************************************************************************************
263 template<>
264 struct IsPowerOf<0,0> : public TrueType
265 {
266  public:
267  //**********************************************************************************************
268  enum { value = 1 };
269  typedef TrueType Type;
270  //**********************************************************************************************
271 };
273 //*************************************************************************************************
274 
275 } // namespace blaze
276 
277 #endif
Header file for the FalseType type/value trait base class.
Compile time type selection.The SelectType class template selects one of the two given types T1 and T...
Definition: SelectType.h:59
Header file for the SelectType class template.
boost::false_type FalseType
Type/value traits base class.The FalseType class is used as base class for type traits and value trai...
Definition: FalseType.h:61
boost::true_type TrueType
Type traits base class.The TrueType class is used as base class for type traits and value traits that...
Definition: TrueType.h:61
Compile time check for a power relationship of integral values to a given base.This value trait tests...
Definition: IsPowerOf.h:80
Header file for the TrueType type/value trait base class.