e970c1a1629db886507baf8beb1f277eaae44e57
[senf.git] / Socket / ClientSocketHandle.ih
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 ClientSocketHandle internal header */
23
24 #ifndef IH_ClientSocketHandle_
25 #define IH_ClientSocketHandle_ 1
26
27 // Custom includes
28 #include "Utils/IteratorTraits.hh"
29
30 ///////////////////////////////ih.p////////////////////////////////////////
31
32 namespace senf {
33 namespace detail {
34
35     ///////////////////////////////////////////////////////////////////////
36     // senf::detail::ReadRange
37
38     template <class Handle, class ForwardWritableRange, bool IsContiguous>
39     struct ReadRange 
40     {
41         static typename boost::range_iterator<ForwardWritableRange>::type
42         read(Handle & handle, ForwardWritableRange & range);
43
44         static typename boost::range_iterator<ForwardWritableRange>::type
45         readfrom(Handle & handle, ForwardWritableRange & range, typename Handle::Address & addr);
46     };
47
48     template <class Handle, class ForwardWritableRange>
49     struct ReadRange<Handle, ForwardWritableRange, true>
50     {
51         static typename boost::range_iterator<ForwardWritableRange>::type
52         read(Handle & handle, ForwardWritableRange & range);
53
54         static typename boost::range_iterator<ForwardWritableRange>::type
55         readfrom(Handle & handle, ForwardWritableRange & range, typename Handle::Address & addr);
56     };
57
58     ///////////////////////////////////////////////////////////////////////
59     // senf::detail::WriteRange
60
61     template <class Handle, class ForwardReadableRange, bool IsContiguous>
62     struct WriteRange
63     {
64         static typename boost::range_iterator<ForwardReadableRange>::type
65         write(Handle & handle, ForwardReadableRange & range);
66         
67         static typename boost::range_iterator<ForwardReadableRange>::type
68         writeto(Handle & handle, ForwardReadableRange & range,
69                 typename Handle::Address const & addr);
70     };
71
72     template <class Handle, class ForwardReadableRange>
73     struct WriteRange<Handle, ForwardReadableRange, true>
74     {
75         static typename boost::range_const_iterator<ForwardReadableRange>::type
76         write(Handle & handle, ForwardReadableRange & range);
77         
78         static typename boost::range_const_iterator<ForwardReadableRange>::type
79         writeto(Handle & handle, ForwardReadableRange & range,
80                 typename Handle::Address const & addr);
81     };
82
83 }}
84
85 ///////////////////////////////ih.e////////////////////////////////////////
86 #endif
87
88 \f
89 // Local Variables:
90 // mode: c++
91 // fill-column: 100
92 // c-file-style: "senf"
93 // indent-tabs-mode: nil
94 // ispell-local-dictionary: "american"
95 // compile-command: "scons -u test"
96 // End: