87fd4e195fb90772e4e2d410ddb7352e87e5ba87
[senf.git] / Socket / PacketSocketHandle.ih
1 // $Id$
2 //
3 // Copyright (C) 2006 
4 // Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS)
5 // Kompetenzzentrum fuer Satelitenkommunikation (SatCom)
6 //     Stefan Bund <stefan.bund@fokus.fraunhofer.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 PacketProtocol and PacketSocketHandle internal header
25  */
26
27 #ifndef IH_PacketSocketHandle_
28 #define IH_PacketSocketHandle_ 1
29
30 // Custom includes
31
32 ///////////////////////////////ih.p////////////////////////////////////////
33
34 namespace senf {
35
36 namespace detail {
37
38     /** \brief Abstract address copier
39         \internal
40         
41         This class provides the abstract interface to copy a
42         link-local address to a destination address.
43      */
44     struct LLAddressCopier
45     {
46         virtual ~LLAddressCopier() {}
47         virtual unsigned operator()(unsigned char * target) const = 0;
48     };
49
50     /** \brief Implementation of LLAddressCopier to copy arbitrary Range
51         \internal
52
53         This implementation of the LLAddressCopier interface will copy
54         an arbitrary range to the target address. This class is used,
55         to convert the compile-time polymorphism of templates
56         (provided by the \c ForwardRange template argument) into
57         runtime polymorphism (provided by the abstract LLAddressCopier
58         interface).
59      */
60     template <class ForwardRange>
61     struct Range_LLAddressCopier
62         : public LLAddressCopier
63     {
64         Range_LLAddressCopier(ForwardRange const & range);
65         
66         unsigned operator()(unsigned char * target) const;
67
68         ForwardRange const & range_;
69     };
70
71 }}
72
73 ///////////////////////////////ih.e////////////////////////////////////////
74 #endif
75
76 \f
77 // Local Variables:
78 // mode: c++
79 // c-file-style: "senf"
80 // End: