Fix documentation build under maverick (doxygen 1.7.1)
[senf.git] / senf / Socket / Protocols / INet / INet6Address.ih
1 // $Id$
2 //
3 // Copyright (C) 2007
4 // Fraunhofer Institute for Open Communication Systems (FOKUS)
5 // Competence Center NETwork research (NET), St. Augustin, GERMANY
6 //     Stefan Bund <g0dil@berlios.de>
7 //
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.
12 //
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.
17 //
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.
22
23 /** \file
24     \brief INet6Address internal header */
25
26 #ifndef IH_SENF_Socket_Protocols_INet_INet6Address_
27 #define IH_SENF_Socket_Protocols_INet_INet6Address_ 1
28
29 // Custom includes
30
31 //-/////////////////////////////////////////////////////////////////////////////////////////////////
32
33 namespace senf {
34
35     class INet6Address;
36
37 namespace detail {
38
39 #   ifndef DOXYGEN
40
41     template <unsigned a, unsigned bytes, unsigned restbits>
42     struct CheckINet6Network_impl5
43     {};
44
45     template <unsigned a>
46     struct CheckINet6Network_impl5<a,0,0>
47     {
48         static bool match(boost::uint8_t v0, boost::uint8_t v1);
49     };
50
51     template <unsigned a, unsigned restbits>
52     struct CheckINet6Network_impl5<a,0,restbits>
53     {
54         static bool match(boost::uint8_t v0, boost::uint8_t v1);
55     };
56
57     template <unsigned a>
58     struct CheckINet6Network_impl5<a,1,0>
59     {
60         static bool match(boost::uint8_t v0, boost::uint8_t v1);
61     };
62
63     template <unsigned a, unsigned restbits>
64     struct CheckINet6Network_impl5<a,1,restbits>
65     {
66         static bool match(boost::uint8_t v0, boost::uint8_t v1);
67     };
68
69     template <unsigned a, unsigned bits>
70     struct CheckINet6Network_impl4
71         : public CheckINet6Network_impl5<a,bits/8,bits%8>
72     {};
73
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
77     {};
78
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>
82     {
83         static bool match(INet6Address const & addr);
84     };
85
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>
89     {
90         static bool match(INet6Address const & addr);
91     };
92
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>
96     {
97         static bool match(INet6Address const & addr);
98     };
99
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>
103     {
104         static bool match(INet6Address const & addr);
105     };
106
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>
110     {
111         static bool match(INet6Address const & addr);
112     };
113
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>
117     {
118         static bool match(INet6Address const & addr);
119     };
120
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>
124     {
125         static bool match(INet6Address const & addr);
126     };
127
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>
131     {
132         static bool match(INet6Address const & addr);
133     };
134
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>
139     {};
140
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>
145     {};
146
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>
151     {};
152
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>
157     {};
158
159     template <unsigned a0, unsigned a1, unsigned a2, unsigned a3, unsigned a4,
160               unsigned a5>
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>
163     {};
164
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>
168     {};
169
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>
173     {};
174
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>
178     {};
179
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>
183     {};
184
185 #   endif
186
187     boost::uint8_t low_bits_mask(unsigned bits);
188
189     template <class ForwardIterator, class Function>
190     void apply_mask(unsigned bits, ForwardIterator b, ForwardIterator e, Function fn);
191
192     template <class ForwardIterator1, class ForwardIterator2, class Function>
193     ForwardIterator1 find_if_mask(unsigned bits,
194                                   ForwardIterator1 b1, ForwardIterator1 e1, ForwardIterator2 b2,
195                                   Function fn);
196
197 }}
198
199 //-/////////////////////////////////////////////////////////////////////////////////////////////////
200 #endif
201
202 \f
203 // Local Variables:
204 // mode: c++
205 // fill-column: 100
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"
211 // End: