4 // Fraunhofer Institute for Open Communication Systems (FOKUS)
6 // The contents of this file are subject to the Fraunhofer FOKUS Public License
7 // Version 1.0 (the "License"); you may not use this file except in compliance
8 // with the License. You may obtain a copy of the License at
9 // http://senf.berlios.de/license.html
11 // The Fraunhofer FOKUS Public License Version 1.0 is based on,
12 // but modifies the Mozilla Public License Version 1.1.
13 // See the full license text for the amendments.
15 // Software distributed under the License is distributed on an "AS IS" basis,
16 // WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
17 // for the specific language governing rights and limitations under the License.
19 // The Original Code is Fraunhofer FOKUS code.
21 // The Initial Developer of the Original Code is Fraunhofer-Gesellschaft e.V.
22 // (registered association), Hansastraße 27 c, 80686 Munich, Germany.
23 // All Rights Reserved.
26 // Stefan Bund <g0dil@berlios.de>
29 \brief INet6Address internal header */
31 #ifndef IH_SENF_Socket_Protocols_INet_INet6Address_
32 #define IH_SENF_Socket_Protocols_INet_INet6Address_ 1
36 //-/////////////////////////////////////////////////////////////////////////////////////////////////
46 template <unsigned a, unsigned bytes, unsigned restbits>
47 struct CheckINet6Network_impl5
51 struct CheckINet6Network_impl5<a,0,0>
53 static bool match(boost::uint8_t v0, boost::uint8_t v1);
56 template <unsigned a, unsigned restbits>
57 struct CheckINet6Network_impl5<a,0,restbits>
59 static bool match(boost::uint8_t v0, boost::uint8_t v1);
63 struct CheckINet6Network_impl5<a,1,0>
65 static bool match(boost::uint8_t v0, boost::uint8_t v1);
68 template <unsigned a, unsigned restbits>
69 struct CheckINet6Network_impl5<a,1,restbits>
71 static bool match(boost::uint8_t v0, boost::uint8_t v1);
74 template <unsigned a, unsigned bits>
75 struct CheckINet6Network_impl4
76 : public CheckINet6Network_impl5<a,bits/8,bits%8>
79 template <unsigned a0, unsigned a1, unsigned a2, unsigned a3, unsigned a4,
80 unsigned a5, unsigned a6, unsigned a7, unsigned words, unsigned restbits>
81 struct CheckINet6Network_impl3
84 template <unsigned a0, unsigned a1, unsigned a2, unsigned a3, unsigned a4,
85 unsigned a5, unsigned a6, unsigned a7, unsigned restbits>
86 struct CheckINet6Network_impl3<a0,a1,a2,a3,a4,a5,a6,a7,0,restbits>
88 static bool match(INet6Address const & addr);
91 template <unsigned a0, unsigned a1, unsigned a2, unsigned a3, unsigned a4,
92 unsigned a5, unsigned a6, unsigned a7, unsigned restbits>
93 struct CheckINet6Network_impl3<a0,a1,a2,a3,a4,a5,a6,a7,1,restbits>
95 static bool match(INet6Address const & addr);
98 template <unsigned a0, unsigned a1, unsigned a2, unsigned a3, unsigned a4,
99 unsigned a5, unsigned a6, unsigned a7, unsigned restbits>
100 struct CheckINet6Network_impl3<a0,a1,a2,a3,a4,a5,a6,a7,2,restbits>
102 static bool match(INet6Address const & addr);
105 template <unsigned a0, unsigned a1, unsigned a2, unsigned a3, unsigned a4,
106 unsigned a5, unsigned a6, unsigned a7, unsigned restbits>
107 struct CheckINet6Network_impl3<a0,a1,a2,a3,a4,a5,a6,a7,3,restbits>
109 static bool match(INet6Address const & addr);
112 template <unsigned a0, unsigned a1, unsigned a2, unsigned a3, unsigned a4,
113 unsigned a5, unsigned a6, unsigned a7, unsigned restbits>
114 struct CheckINet6Network_impl3<a0,a1,a2,a3,a4,a5,a6,a7,4,restbits>
116 static bool match(INet6Address const & addr);
119 template <unsigned a0, unsigned a1, unsigned a2, unsigned a3, unsigned a4,
120 unsigned a5, unsigned a6, unsigned a7, unsigned restbits>
121 struct CheckINet6Network_impl3<a0,a1,a2,a3,a4,a5,a6,a7,5,restbits>
123 static bool match(INet6Address const & addr);
126 template <unsigned a0, unsigned a1, unsigned a2, unsigned a3, unsigned a4,
127 unsigned a5, unsigned a6, unsigned a7, unsigned restbits>
128 struct CheckINet6Network_impl3<a0,a1,a2,a3,a4,a5,a6,a7,6,restbits>
130 static bool match(INet6Address const & addr);
133 template <unsigned a0, unsigned a1, unsigned a2, unsigned a3, unsigned a4,
134 unsigned a5, unsigned a6, unsigned a7, unsigned restbits>
135 struct CheckINet6Network_impl3<a0,a1,a2,a3,a4,a5,a6,a7,7,restbits>
137 static bool match(INet6Address const & addr);
140 template <unsigned a0, unsigned a1, unsigned a2, unsigned a3, unsigned a4,
141 unsigned a5, unsigned a6, unsigned a7, unsigned bits>
142 struct CheckINet6Network_impl2
143 : public CheckINet6Network_impl3<a0,a1,a2,a3,a4,a5,a6,a7,bits/16,bits%16>
146 template <unsigned a0, unsigned a1, unsigned a2, unsigned a3, unsigned a4,
147 unsigned a5, unsigned a6, unsigned a7, unsigned a8>
148 struct CheckINet6Network_impl
149 : public CheckINet6Network_impl2<a0,a1,a2,a3,a4,a5,a6,a7,a8>
152 template <unsigned a0, unsigned a1, unsigned a2, unsigned a3, unsigned a4,
153 unsigned a5, unsigned a6, unsigned a7>
154 struct CheckINet6Network_impl<a0,a1,a2,a3,a4,a5,a6,a7,0>
155 : public CheckINet6Network_impl2<a0,a1,a2,a3,a4,a5,a6,0,a7>
158 template <unsigned a0, unsigned a1, unsigned a2, unsigned a3, unsigned a4,
159 unsigned a5, unsigned a6>
160 struct CheckINet6Network_impl<a0,a1,a2,a3,a4,a5,a6,0,0>
161 : public CheckINet6Network_impl2<a0,a1,a2,a3,a4,a5,0,0,a6>
164 template <unsigned a0, unsigned a1, unsigned a2, unsigned a3, unsigned a4,
166 struct CheckINet6Network_impl<a0,a1,a2,a3,a4,a5,0,0,0>
167 : public CheckINet6Network_impl2<a0,a1,a2,a3,a4,0,0,0,a5>
170 template <unsigned a0, unsigned a1, unsigned a2, unsigned a3, unsigned a4>
171 struct CheckINet6Network_impl<a0,a1,a2,a3,a4,0,0,0,0>
172 : public CheckINet6Network_impl2<a0,a1,a2,a3,0,0,0,0,a4>
175 template <unsigned a0, unsigned a1, unsigned a2, unsigned a3>
176 struct CheckINet6Network_impl<a0,a1,a2,a3,0,0,0,0,0>
177 : public CheckINet6Network_impl2<a0,a1,a2,0,0,0,0,0,a3>
180 template <unsigned a0, unsigned a1, unsigned a2>
181 struct CheckINet6Network_impl<a0,a1,a2,0,0,0,0,0,0>
182 : public CheckINet6Network_impl2<a0,a1,0,0,0,0,0,0,a2>
185 template <unsigned a0, unsigned a1>
186 struct CheckINet6Network_impl<a0,a1,0,0,0,0,0,0,0>
187 : public CheckINet6Network_impl2<a0,0,0,0,0,0,0,0,a1>
192 boost::uint8_t low_bits_mask(unsigned bits);
194 template <class ForwardIterator, class Function>
195 void apply_mask(unsigned bits, ForwardIterator b, ForwardIterator e, Function fn);
197 template <class ForwardIterator1, class ForwardIterator2, class Function>
198 ForwardIterator1 find_if_mask(unsigned bits,
199 ForwardIterator1 b1, ForwardIterator1 e1, ForwardIterator2 b2,
204 //-/////////////////////////////////////////////////////////////////////////////////////////////////
211 // comment-column: 40
212 // c-file-style: "senf"
213 // indent-tabs-mode: nil
214 // ispell-local-dictionary: "american"
215 // compile-command: "scons -u test"