00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00026 #ifndef IH_SENF_Socket_ClientSocketHandle_
00027 #define IH_SENF_Socket_ClientSocketHandle_ 1
00028
00029
00030 #include <senf/Utils/IteratorTraits.hh>
00031
00032
00033
00034 namespace senf {
00035 namespace detail {
00036
00037
00038
00039
00047 template <class Handle, class ForwardWritableRange, bool IsContiguous>
00048 struct ReadRange
00049 {
00050 static typename boost::range_iterator<ForwardWritableRange>::type
00051 read(Handle & handle, ForwardWritableRange & range);
00052
00053 static typename boost::range_iterator<ForwardWritableRange>::type
00054 readfrom(Handle & handle, ForwardWritableRange & range, typename Handle::Address & addr);
00055 };
00056
00057 # ifndef DOXYGEN
00058
00059 template <class Handle, class ForwardWritableRange>
00060 struct ReadRange<Handle, ForwardWritableRange, true>
00061 {
00062 static typename boost::range_iterator<ForwardWritableRange>::type
00063 read(Handle & handle, ForwardWritableRange & range);
00064
00065 static typename boost::range_iterator<ForwardWritableRange>::type
00066 readfrom(Handle & handle, ForwardWritableRange & range, typename Handle::Address & addr);
00067 };
00068
00069 # endif
00070
00071
00072
00073
00081 template <class Handle, class ForwardReadableRange, bool IsContiguous>
00082 struct WriteRange
00083 {
00084 static typename boost::range_const_iterator<ForwardReadableRange>::type
00085 write(Handle & handle, ForwardReadableRange & range);
00086
00087 static typename boost::range_const_iterator<ForwardReadableRange>::type
00088 writeto(Handle & handle, ForwardReadableRange & range,
00089 typename Handle::Address const & addr);
00090 };
00091
00092 # ifndef DOXYGEN
00093
00094 template <class Handle, class ForwardReadableRange>
00095 struct WriteRange<Handle, ForwardReadableRange, true>
00096 {
00097 static typename boost::range_const_iterator<ForwardReadableRange>::type
00098 write(Handle & handle, ForwardReadableRange & range);
00099
00100 static typename boost::range_const_iterator<ForwardReadableRange>::type
00101 writeto(Handle & handle, ForwardReadableRange & range,
00102 typename Handle::Address const & addr);
00103 };
00104
00105 # endif
00106
00107 }}
00108
00109
00110 #endif
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121