Merged revisions 262,264-265,267-282,284-298,300-311 via svnmerge from
[senf.git] / Packets / PacketParser.cci
1 // Copyright (C) 2007 
2 // Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS)
3 // Kompetenzzentrum fuer Satelitenkommunikation (SatCom)
4 //     Stefan Bund <g0dil@berlios.de>
5 //
6 // This program is free software; you can redistribute it and/or modify
7 // it under the terms of the GNU General Public License as published by
8 // the Free Software Foundation; either version 2 of the License, or
9 // (at your option) any later version.
10 //
11 // This program is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 // GNU General Public License for more details.
15 //
16 // You should have received a copy of the GNU General Public License
17 // along with this program; if not, write to the
18 // Free Software Foundation, Inc.,
19 // 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
20
21 /** \file
22     \brief PacketParser inline non-template implementation */
23
24 // Custom includes
25 #include <iterator>
26 #include "PacketData.hh"
27
28 #define prefix_ inline
29 ///////////////////////////////cci.p///////////////////////////////////////
30
31 ///////////////////////////////////////////////////////////////////////////
32 // senf::PacketParserBase
33
34 prefix_ senf::PacketParserBase::data_iterator senf::PacketParserBase::i()
35     const
36 {
37     return i_;
38 }
39
40 prefix_ senf::PacketParserBase::state_type senf::PacketParserBase::state()
41     const
42 {
43     return data_;
44 }
45
46 prefix_ senf::PacketData & senf::PacketParserBase::data()
47     const
48 {
49     return * data_;
50 }
51
52 prefix_ void senf::PacketParserBase::init()
53     const
54 {}
55
56 ////////////////////////////////////////
57 // protected members
58
59 prefix_ senf::PacketParserBase::PacketParserBase(data_iterator i, state_type s)
60     : i_ (i), data_ (s)
61 {}
62
63 prefix_ senf::PacketParserBase::PacketParserBase(data_iterator i, state_type s, 
64                                                  size_type size)
65     : i_ (i), data_ (s)
66 {
67     validate(size);
68 }
69
70 prefix_ bool senf::PacketParserBase::check(size_type size)
71 {
72     return size <= size_type(std::distance(i(),end()));
73 }
74
75 prefix_ void senf::PacketParserBase::validate(size_type size)
76 {
77     if (! check(size))
78         throw TruncatedPacketException();
79 }
80
81 ////////////////////////////////////////
82 // private members
83
84 prefix_ senf::PacketParserBase::data_iterator senf::PacketParserBase::end()
85 {
86     return data_->end();
87 }
88
89 ///////////////////////////////cci.e///////////////////////////////////////
90 #undef prefix_
91
92 \f
93 // Local Variables:
94 // mode: c++
95 // fill-column: 100
96 // c-file-style: "senf"
97 // indent-tabs-mode: nil
98 // ispell-local-dictionary: "american"
99 // End: