INet6Address.ct
Go to the documentation of this file.
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
00030 #define prefix_
00031
00032
00033
00034
00035
00036 template <class InputIterator>
00037 prefix_ senf::INet6Address senf::INet6Address::from_data(InputIterator i)
00038 {
00039 INet6Address addr (senf::noinit);
00040 iterator j (addr.begin());
00041 iterator const j_end (addr.end());
00042 for (;j!=j_end;++j,++i)
00043 *j = *i;
00044 return addr;
00045 }
00046
00047
00048
00049
00050 template <class ForwardIterator, class Function>
00051 prefix_ void senf::detail::apply_mask(unsigned bits, ForwardIterator b, ForwardIterator e,
00052 Function fn)
00053 {
00054 for (; bits>8 && b != e; bits -= 8, ++b)
00055 fn(*b, boost::lambda::make_const(0xFFu));
00056 if (bits > 0 && b != e)
00057 fn( *(b++), boost::lambda::make_const(~ low_bits_mask(8-bits)));
00058 for (; b != e; ++b)
00059 fn(*b, boost::lambda::make_const(0u));
00060 }
00061
00062 template <class ForwardIterator1, class ForwardIterator2, class Function>
00063 prefix_ ForwardIterator1 senf::detail::find_if_mask(unsigned bits, ForwardIterator1 b1,
00064 ForwardIterator1 e1, ForwardIterator2 b2,
00065 Function fn)
00066 {
00067 for (; bits>8 && b1 != e1; bits -= 8, ++b1, ++b2)
00068 if (fn(*b1, *b2, boost::lambda::make_const(0xFFu)))
00069 return b1;
00070 if (bits > 0 && b1 != e1)
00071 if (fn(*b1, *b2, boost::lambda::make_const(~ low_bits_mask(8-bits))))
00072 return b1;
00073 for (++b1, ++b2; b1 != e1; ++b1, ++b2)
00074 if (fn(*b1, *b2, boost::lambda::make_const(0u)))
00075 return b1;
00076 return e1;
00077 }
00078
00079
00080 #undef prefix_
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091