00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef MLN_VALUE_INTERNAL_ENCODING_HH
00027 # define MLN_VALUE_INTERNAL_ENCODING_HH
00028
00035 namespace mln
00036 {
00037
00038 namespace value
00039 {
00040
00041 namespace internal
00042 {
00043
00044
00045 template <unsigned n> struct encoding_unsigned_;
00046
00047 template <> struct encoding_unsigned_<8> { typedef unsigned char ret; };
00048 template <> struct encoding_unsigned_<16> { typedef unsigned short ret; };
00049 template <> struct encoding_unsigned_<32> { typedef unsigned int ret; };
00050 template <> struct encoding_unsigned_<64> { typedef unsigned long ret; };
00051
00052 template <> struct encoding_unsigned_<99> { typedef void ret; };
00053
00054 template <unsigned n>
00055 struct encoding_unsigned_
00056 {
00057 typedef typename encoding_unsigned_<n+1>::ret ret;
00058 };
00059
00060
00061
00062 template <unsigned n> struct encoding_signed_;
00063
00064 template <> struct encoding_signed_<8> { typedef signed char ret; };
00065 template <> struct encoding_signed_<16> { typedef signed short ret; };
00066 template <> struct encoding_signed_<32> { typedef signed int ret; };
00067 template <> struct encoding_signed_<64> { typedef signed long ret; };
00068
00069 template <> struct encoding_signed_<99> { typedef void ret; };
00070
00071 template <unsigned n>
00072 struct encoding_signed_
00073 {
00074 typedef typename encoding_signed_<n+1>::ret ret;
00075 };
00076
00077
00078 }
00079
00080 }
00081
00082 }
00083
00084
00085 #endif // ! MLN_VALUE_INTERNAL_ENCODING_HH