00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef __STATIC_BIN_LOG_HH
00019 # define __STATIC_BIN_LOG_HH
00020
00021 # include <type_traits>
00022
00023 namespace fast {
00024 template <typename integral_type, typename N>
00025 struct static_bin_log_wrapped: public
00026 std::integral_constant<integral_type,
00027 static_bin_log_wrapped<integral_type,
00028 std::integral_constant<
00029 integral_type,
00030 (N::value>>1)> >
00031 ::value+1> {};
00032
00033 template <typename integral_type>
00034 struct static_bin_log_wrapped<integral_type,
00035 std::integral_constant<integral_type,
00036 1> >:
00037 public std::integral_constant<integral_type, 0> {};
00038
00039 template <typename integral_type, integral_type N>
00040 struct static_bin_log: public
00041 static_bin_log_wrapped<integral_type,
00042 std::integral_constant<
00043 integral_type,
00044 N> >
00045 {};
00046 }
00047
00048 #endif