Packets: Implement basic AuxParser
[senf.git] / Packets / VectorParser.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 VectorParser internal header */
25
26 #ifndef IH_VectorParser_
27 #define IH_VectorParser_ 1
28
29 // Custom includes
30
31 ///////////////////////////////ih.p////////////////////////////////////////
32
33 namespace senf {
34 namespace detail {
35
36 #   define SENF_PARSER_VEC_N_I(field, name, size, elt_type)                                       \
37         typedef senf::VectorParser<                                                               \
38             elt_type,                                                                             \
39             senf::detail::FixedAuxParserPolicy< BOOST_PP_CAT(size, _t),                           \
40                                                 SENF_PARSER_CURRENT_FIXED_OFFSET()                \
41                                                     - SENF_PARSER_FIXED_OFFSET(size) >            \
42         > BOOST_PP_CAT(name, _vec_t);                                                             \
43         field( name, BOOST_PP_CAT(name, _vec_t) )
44
45     template <class ElementParser>
46     struct VectorParserTraits
47     {
48         template <class AuxPolicy, class AuxTag>
49         struct parser {
50             typedef senf::VectorParser<ElementParser, AuxPolicy> type;
51         };
52     };
53
54
55 #   define SENF_PARSER_VECTOR_I(access, name, size, elt_type)                                     \
56         SENF_PARSER_REQUIRE_VAR(vector)                                                           \
57         SENF_PARSER_COLLECTION_I( access,                                                         \
58                                   name,                                                           \
59                                   size,                                                           \
60                                   senf::detail::VectorParserTraits<elt_type> )
61
62 }}
63                               
64 ///////////////////////////////ih.e////////////////////////////////////////
65 #endif
66
67 \f
68 // Local Variables:
69 // mode: c++
70 // fill-column: 100
71 // comment-column: 40
72 // c-file-style: "senf"
73 // indent-tabs-mode: nil
74 // ispell-local-dictionary: "american"
75 // compile-command: "scons -u test"
76 // End: