fundamental_types.hpp
Go to the documentation of this file.
00001 
00008 /*****************************************************************************
00009 ** Ifdefs
00010 *****************************************************************************/
00011 
00012 #ifndef ECL_TYPE_TRAITS_FUNDAMENTAL_TYPES_HPP_
00013 #define ECL_TYPE_TRAITS_FUNDAMENTAL_TYPES_HPP_
00014 
00015 /*****************************************************************************
00016 ** Includes
00017 *****************************************************************************/
00018 
00019 #include <limits>
00020 #include <ecl/mpl/bool.hpp>
00021 #include <ecl/config/ecl.hpp>
00022 
00023 /*****************************************************************************
00024 ** Namespace
00025 *****************************************************************************/
00026 
00027 namespace ecl {
00028 
00029 /*****************************************************************************
00030 ** Integers
00031 *****************************************************************************/
00040 template <typename T>
00041 class is_integral : public False {};
00042 
00043 
00049 template <>
00050 class is_integral<char> : public True {};
00051 
00057 template <>
00058 class is_integral<unsigned char> : public True {};
00059 
00065 template <>
00066 class is_integral<short> : public True {};
00067 
00073 template <>
00074 class is_integral<unsigned short> : public True {};
00075 
00081 template <>
00082 class is_integral<int> : public True {};
00083 
00089 template <>
00090 class is_integral<unsigned int> : public True {};
00091 
00097 template <>
00098 class is_integral<long> : public True {};
00099 
00105 template <>
00106 class is_integral<unsigned long> : public True {};
00107 
00113 template <>
00114 class is_integral<long long> : public True {};
00115 
00121 template <>
00122 class is_integral<unsigned long long> : public True {};
00123 
00124 /*****************************************************************************
00125 ** Unsigned Integers
00126 *****************************************************************************/
00135 template <typename T>
00136 class is_unsigned : public False {};
00137 
00141 template <>
00142 class is_unsigned<unsigned char> : public True {};
00143 
00147 template <>
00148 class is_unsigned<unsigned short> : public True {};
00149 
00153 template <>
00154 class is_unsigned<unsigned int> : public True {};
00155 
00159 template <>
00160 class is_unsigned<unsigned long> : public True {};
00161 
00165 template <>
00166 class is_unsigned<unsigned long long> : public True {};
00167 
00168 /*****************************************************************************
00169 ** Signed Integers
00170 *****************************************************************************/
00179 template <typename T>
00180 class is_signed : public False {};
00181 
00185 template <>
00186 class is_signed<char> : public True {};
00187 
00191 template <>
00192 class is_signed<short> : public True {};
00193 
00197 template <>
00198 class is_signed<int> : public True {};
00199 
00203 template <>
00204 class is_signed<long> : public True {};
00205 
00209 template <>
00210 class is_signed<long long> : public True {};
00211 
00212 
00213 /*****************************************************************************
00214 ** Floats
00215 *****************************************************************************/
00216 
00225 template <typename T>
00226 class is_float : public False {};
00227 
00233 template <>
00234 class is_float<float> : public True {};
00235 
00241 template <>
00242 class is_float<double> : public True {};
00243 
00249 template <>
00250 class is_float<long double> : public True {};
00251 
00252 /*****************************************************************************
00253 ** Bytes
00254 *****************************************************************************/
00255 
00264 template <typename T>
00265 class is_signed_byte : public False {};
00266 
00272 template <>
00273 class is_signed_byte<signed char> : public True {};
00274 
00282 template <>
00283 class is_signed_byte<char> : public Bool<std::numeric_limits<char>::is_signed> {};
00284 
00293 template <typename T>
00294 class is_unsigned_byte : public False {};
00295 
00301 template <>
00302 class is_unsigned_byte<unsigned char> : public True {};
00303 
00311 template <>
00312 class is_unsigned_byte<char> : public Bool<!std::numeric_limits<char>::is_signed> {};
00313 
00322 template <typename T>
00323 class is_byte : public False {};
00324 
00330 template <>
00331 class is_byte<signed char> : public True {};
00332 
00338 template <>
00339 class is_byte<char> : public True {};
00340 
00346 template <>
00347 class is_byte<unsigned char> : public True {};
00348 
00349 } // namespace ecl
00350 
00351 #endif /* ECL_TYPE_TRAITS_FUNDAMENTAL_TYPES_HPP_ */


ecl_type_traits
Author(s): Daniel Stonier
autogenerated on Sun Oct 5 2014 23:35:21