00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00026 #include "INet6Address.ih"
00027
00028
00029 #include <boost/integer/integer_mask.hpp>
00030
00031 #define prefix_ inline
00032
00033
00034 #ifndef DOXYGEN
00035
00036 template <unsigned a>
00037 prefix_ bool senf::detail::CheckINet6Network_impl5<a,0,0>::match(boost::uint8_t v0,
00038 boost::uint8_t v1)
00039 {
00040 return true;
00041 }
00042
00043 template <unsigned a, unsigned restbits>
00044 prefix_ bool senf::detail::CheckINet6Network_impl5<a,0,restbits>::match(boost::uint8_t v0,
00045 boost::uint8_t v1)
00046 {
00047 return v0 & ~boost::low_bits_mask_t<8-restbits>::sig_bits
00048 == boost::uint8_t(a>>8) & ~boost::low_bits_mask_t<8-restbits>::sig_bits;
00049 }
00050
00051 template <unsigned a>
00052 prefix_ bool senf::detail::CheckINet6Network_impl5<a,1,0>::match(boost::uint8_t v0,
00053 boost::uint8_t v1)
00054 {
00055 return v0 == boost::uint8_t(a>>8);
00056 }
00057
00058 template <unsigned a, unsigned restbits>
00059 prefix_ bool senf::detail::CheckINet6Network_impl5<a,1,restbits>::match(boost::uint8_t v0,
00060 boost::uint8_t v1)
00061 {
00062 return v0 == boost::uint8_t(a>>8) &&
00063 v1 & ~boost::low_bits_mask_t<8-restbits>::sig_bits
00064 == boost::uint8_t(a) & ~boost::low_bits_mask_t<8-restbits>::sig_bits;
00065 }
00066
00067 template <unsigned a0, unsigned a1, unsigned a2, unsigned a3, unsigned a4, unsigned a5,
00068 unsigned a6, unsigned a7, unsigned restbits>
00069 prefix_ bool senf::detail::CheckINet6Network_impl3<a0,a1,a2,a3,a4,a5,a6,a7,0,restbits>::
00070 match(INet6Address const & addr)
00071 {
00072 return CheckINet6Network_impl4<a0,restbits>::match(addr[0],addr[1]);
00073 }
00074
00075 template <unsigned a0, unsigned a1, unsigned a2, unsigned a3, unsigned a4, unsigned a5,
00076 unsigned a6, unsigned a7, unsigned restbits>
00077 prefix_ bool senf::detail::CheckINet6Network_impl3<a0,a1,a2,a3,a4,a5,a6,a7,1,restbits>::
00078 match(INet6Address const & addr)
00079 {
00080 return
00081 addr[0] == boost::uint8_t(a0>>8) && addr[1] == boost::uint8_t(a0) &&
00082 CheckINet6Network_impl4<a1,restbits>::match(addr[2],addr[3]);
00083 }
00084
00085 template <unsigned a0, unsigned a1, unsigned a2, unsigned a3, unsigned a4, unsigned a5,
00086 unsigned a6, unsigned a7, unsigned restbits>
00087 prefix_ bool senf::detail::CheckINet6Network_impl3<a0,a1,a2,a3,a4,a5,a6,a7,2,restbits>::
00088 match(INet6Address const & addr)
00089 {
00090 return
00091 addr[0] == boost::uint8_t(a0>>8) && addr[1] == boost::uint8_t(a0) &&
00092 addr[2] == boost::uint8_t(a1>>8) && addr[3] == boost::uint8_t(a1) &&
00093 CheckINet6Network_impl4<a1,restbits>::match(addr[4],addr[5]);
00094 }
00095
00096 template <unsigned a0, unsigned a1, unsigned a2, unsigned a3, unsigned a4, unsigned a5,
00097 unsigned a6, unsigned a7, unsigned restbits>
00098 prefix_ bool senf::detail::CheckINet6Network_impl3<a0,a1,a2,a3,a4,a5,a6,a7,3,restbits>::
00099 match(INet6Address const & addr)
00100 {
00101 return
00102 addr[0] == boost::uint8_t(a0>>8) && addr[1] == boost::uint8_t(a0) &&
00103 addr[2] == boost::uint8_t(a1>>8) && addr[3] == boost::uint8_t(a1) &&
00104 addr[4] == boost::uint8_t(a2>>8) && addr[5] == boost::uint8_t(a2) &&
00105 CheckINet6Network_impl4<a3,restbits>::match(addr[6],addr[7]);
00106 }
00107
00108 template <unsigned a0, unsigned a1, unsigned a2, unsigned a3, unsigned a4, unsigned a5,
00109 unsigned a6, unsigned a7, unsigned restbits>
00110 prefix_ bool senf::detail::CheckINet6Network_impl3<a0,a1,a2,a3,a4,a5,a6,a7,4,restbits>::
00111 match(INet6Address const & addr)
00112 {
00113 return
00114 addr[0] == boost::uint8_t(a0>>8) && addr[1] == boost::uint8_t(a0) &&
00115 addr[2] == boost::uint8_t(a1>>8) && addr[3] == boost::uint8_t(a1) &&
00116 addr[4] == boost::uint8_t(a2>>8) && addr[5] == boost::uint8_t(a2) &&
00117 addr[6] == boost::uint8_t(a3>>8) && addr[7] == boost::uint8_t(a3) &&
00118 CheckINet6Network_impl4<a4,restbits>::match(addr[8],addr[9]);
00119 }
00120
00121 template <unsigned a0, unsigned a1, unsigned a2, unsigned a3, unsigned a4, unsigned a5,
00122 unsigned a6, unsigned a7, unsigned restbits>
00123 prefix_ bool senf::detail::CheckINet6Network_impl3<a0,a1,a2,a3,a4,a5,a6,a7,5,restbits>::
00124 match(INet6Address const & addr)
00125 {
00126 return
00127 addr[0] == boost::uint8_t(a0>>8) && addr[1] == boost::uint8_t(a0) &&
00128 addr[2] == boost::uint8_t(a1>>8) && addr[3] == boost::uint8_t(a1) &&
00129 addr[4] == boost::uint8_t(a2>>8) && addr[5] == boost::uint8_t(a2) &&
00130 addr[6] == boost::uint8_t(a3>>8) && addr[7] == boost::uint8_t(a3) &&
00131 addr[8] == boost::uint8_t(a4>>8) && addr[9] == boost::uint8_t(a4) &&
00132 CheckINet6Network_impl4<a5,restbits>::match(addr[10],addr[11]);
00133 }
00134
00135 template <unsigned a0, unsigned a1, unsigned a2, unsigned a3, unsigned a4, unsigned a5,
00136 unsigned a6, unsigned a7, unsigned restbits>
00137 prefix_ bool senf::detail::CheckINet6Network_impl3<a0,a1,a2,a3,a4,a5,a6,a7,6,restbits>::
00138 match(INet6Address const & addr)
00139 {
00140 return
00141 addr[0] == boost::uint8_t(a0>>8) && addr[1] == boost::uint8_t(a0) &&
00142 addr[2] == boost::uint8_t(a1>>8) && addr[3] == boost::uint8_t(a1) &&
00143 addr[4] == boost::uint8_t(a2>>8) && addr[5] == boost::uint8_t(a2) &&
00144 addr[6] == boost::uint8_t(a3>>8) && addr[7] == boost::uint8_t(a3) &&
00145 addr[8] == boost::uint8_t(a4>>8) && addr[9] == boost::uint8_t(a4) &&
00146 addr[10] == boost::uint8_t(a5>>8) && addr[11] == boost::uint8_t(a5) &&
00147 CheckINet6Network_impl4<a6,restbits>::match(addr[12],addr[13]);
00148 }
00149
00150 template <unsigned a0, unsigned a1, unsigned a2, unsigned a3, unsigned a4, unsigned a5,
00151 unsigned a6, unsigned a7, unsigned restbits>
00152 prefix_ bool senf::detail::CheckINet6Network_impl3<a0,a1,a2,a3,a4,a5,a6,a7,7,restbits>::
00153 match(INet6Address const & addr)
00154 {
00155 return
00156 addr[0] == boost::uint8_t(a0>>8) && addr[1] == boost::uint8_t(a0) &&
00157 addr[2] == boost::uint8_t(a1>>8) && addr[3] == boost::uint8_t(a1) &&
00158 addr[4] == boost::uint8_t(a2>>8) && addr[5] == boost::uint8_t(a2) &&
00159 addr[6] == boost::uint8_t(a3>>8) && addr[7] == boost::uint8_t(a3) &&
00160 addr[8] == boost::uint8_t(a4>>8) && addr[9] == boost::uint8_t(a4) &&
00161 addr[10] == boost::uint8_t(a5>>8) && addr[11] == boost::uint8_t(a5) &&
00162 addr[12] == boost::uint8_t(a6>>8) && addr[13] == boost::uint8_t(a6) &&
00163 CheckINet6Network_impl4<a7,restbits>::match(addr[14],addr[15]);
00164 }
00165
00166 #endif
00167
00168
00169 #undef prefix_
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180