4 // Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS)
5 // Kompetenzzentrum fuer Satelitenkommunikation (SatCom)
6 // Stefan Bund <g0dil@berlios.de>
8 // This program is free software; you can redistribute it and/or modify
9 // it under the terms of the GNU General Public License as published by
10 // the Free Software Foundation; either version 2 of the License, or
11 // (at your option) any later version.
13 // This program is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 // GNU General Public License for more details.
18 // You should have received a copy of the GNU General Public License
19 // along with this program; if not, write to the
20 // Free Software Foundation, Inc.,
21 // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
24 \brief INet6Address internal header */
26 #ifndef IH_INet6Address_
27 #define IH_INet6Address_ 1
31 ///////////////////////////////ih.p////////////////////////////////////////
41 template <unsigned a, unsigned bytes, unsigned restbits>
42 struct CheckINet6Network_impl5
46 struct CheckINet6Network_impl5<a,0,0>
48 static bool match(boost::uint8_t v0, boost::uint8_t v1);
51 template <unsigned a, unsigned restbits>
52 struct CheckINet6Network_impl5<a,0,restbits>
54 static bool match(boost::uint8_t v0, boost::uint8_t v1);
58 struct CheckINet6Network_impl5<a,1,0>
60 static bool match(boost::uint8_t v0, boost::uint8_t v1);
63 template <unsigned a, unsigned restbits>
64 struct CheckINet6Network_impl5<a,1,restbits>
66 static bool match(boost::uint8_t v0, boost::uint8_t v1);
69 template <unsigned a, unsigned bits>
70 struct CheckINet6Network_impl4
71 : public CheckINet6Network_impl5<a,bits/8,bits%8>
74 template <unsigned a0, unsigned a1, unsigned a2, unsigned a3, unsigned a4,
75 unsigned a5, unsigned a6, unsigned a7, unsigned words, unsigned restbits>
76 struct CheckINet6Network_impl3
79 template <unsigned a0, unsigned a1, unsigned a2, unsigned a3, unsigned a4,
80 unsigned a5, unsigned a6, unsigned a7, unsigned restbits>
81 struct CheckINet6Network_impl3<a0,a1,a2,a3,a4,a5,a6,a7,0,restbits>
83 static bool match(INet6Address const & addr);
86 template <unsigned a0, unsigned a1, unsigned a2, unsigned a3, unsigned a4,
87 unsigned a5, unsigned a6, unsigned a7, unsigned restbits>
88 struct CheckINet6Network_impl3<a0,a1,a2,a3,a4,a5,a6,a7,1,restbits>
90 static bool match(INet6Address const & addr);
93 template <unsigned a0, unsigned a1, unsigned a2, unsigned a3, unsigned a4,
94 unsigned a5, unsigned a6, unsigned a7, unsigned restbits>
95 struct CheckINet6Network_impl3<a0,a1,a2,a3,a4,a5,a6,a7,2,restbits>
97 static bool match(INet6Address const & addr);
100 template <unsigned a0, unsigned a1, unsigned a2, unsigned a3, unsigned a4,
101 unsigned a5, unsigned a6, unsigned a7, unsigned restbits>
102 struct CheckINet6Network_impl3<a0,a1,a2,a3,a4,a5,a6,a7,3,restbits>
104 static bool match(INet6Address const & addr);
107 template <unsigned a0, unsigned a1, unsigned a2, unsigned a3, unsigned a4,
108 unsigned a5, unsigned a6, unsigned a7, unsigned restbits>
109 struct CheckINet6Network_impl3<a0,a1,a2,a3,a4,a5,a6,a7,4,restbits>
111 static bool match(INet6Address const & addr);
114 template <unsigned a0, unsigned a1, unsigned a2, unsigned a3, unsigned a4,
115 unsigned a5, unsigned a6, unsigned a7, unsigned restbits>
116 struct CheckINet6Network_impl3<a0,a1,a2,a3,a4,a5,a6,a7,5,restbits>
118 static bool match(INet6Address const & addr);
121 template <unsigned a0, unsigned a1, unsigned a2, unsigned a3, unsigned a4,
122 unsigned a5, unsigned a6, unsigned a7, unsigned restbits>
123 struct CheckINet6Network_impl3<a0,a1,a2,a3,a4,a5,a6,a7,6,restbits>
125 static bool match(INet6Address const & addr);
128 template <unsigned a0, unsigned a1, unsigned a2, unsigned a3, unsigned a4,
129 unsigned a5, unsigned a6, unsigned a7, unsigned restbits>
130 struct CheckINet6Network_impl3<a0,a1,a2,a3,a4,a5,a6,a7,7,restbits>
132 static bool match(INet6Address const & addr);
135 template <unsigned a0, unsigned a1, unsigned a2, unsigned a3, unsigned a4,
136 unsigned a5, unsigned a6, unsigned a7, unsigned bits>
137 struct CheckINet6Network_impl2
138 : public CheckINet6Network_impl3<a0,a1,a2,a3,a4,a5,a6,a7,bits/16,bits%16>
141 template <unsigned a0, unsigned a1, unsigned a2, unsigned a3, unsigned a4,
142 unsigned a5, unsigned a6, unsigned a7, unsigned a8>
143 struct CheckINet6Network_impl
144 : public CheckINet6Network_impl2<a0,a1,a2,a3,a4,a5,a6,a7,a8>
147 template <unsigned a0, unsigned a1, unsigned a2, unsigned a3, unsigned a4,
148 unsigned a5, unsigned a6, unsigned a7>
149 struct CheckINet6Network_impl<a0,a1,a2,a3,a4,a5,a6,a7,0>
150 : public CheckINet6Network_impl2<a0,a1,a2,a3,a4,a5,a6,0,a7>
153 template <unsigned a0, unsigned a1, unsigned a2, unsigned a3, unsigned a4,
154 unsigned a5, unsigned a6>
155 struct CheckINet6Network_impl<a0,a1,a2,a3,a4,a5,a6,0,0>
156 : public CheckINet6Network_impl2<a0,a1,a2,a3,a4,a5,0,0,a6>
159 template <unsigned a0, unsigned a1, unsigned a2, unsigned a3, unsigned a4,
161 struct CheckINet6Network_impl<a0,a1,a2,a3,a4,a5,0,0,0>
162 : public CheckINet6Network_impl2<a0,a1,a2,a3,a4,0,0,0,a5>
165 template <unsigned a0, unsigned a1, unsigned a2, unsigned a3, unsigned a4>
166 struct CheckINet6Network_impl<a0,a1,a2,a3,a4,0,0,0,0>
167 : public CheckINet6Network_impl2<a0,a1,a2,a3,0,0,0,0,a4>
170 template <unsigned a0, unsigned a1, unsigned a2, unsigned a3>
171 struct CheckINet6Network_impl<a0,a1,a2,a3,0,0,0,0,0>
172 : public CheckINet6Network_impl2<a0,a1,a2,0,0,0,0,0,a3>
175 template <unsigned a0, unsigned a1, unsigned a2>
176 struct CheckINet6Network_impl<a0,a1,a2,0,0,0,0,0,0>
177 : public CheckINet6Network_impl2<a0,a1,0,0,0,0,0,0,a2>
180 template <unsigned a0, unsigned a1>
181 struct CheckINet6Network_impl<a0,a1,0,0,0,0,0,0,0>
182 : public CheckINet6Network_impl2<a0,0,0,0,0,0,0,0,a1>
187 boost::uint8_t low_bits_mask(unsigned bits);
189 template <class ForwardIterator, class Function>
190 void apply_mask(unsigned bits, ForwardIterator b, ForwardIterator e, Function fn);
192 template <class ForwardIterator1, class ForwardIterator2, class Function>
193 ForwardIterator1 find_if_mask(unsigned bits,
194 ForwardIterator1 b1, ForwardIterator1 e1, ForwardIterator2 b2,
199 ///////////////////////////////ih.e////////////////////////////////////////
206 // comment-column: 40
207 // c-file-style: "senf"
208 // indent-tabs-mode: nil
209 // ispell-local-dictionary: "american"
210 // compile-command: "scons -u test"