X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Socket%2FClientSocketHandle.hh;h=1eff5ce5d0311d88350fe44ae870672e4728ef61;hb=81ffa1c459b96dd44472bcef37e1e373934ee138;hp=38e7ea0388adf701bbacd3bad337baf3b180994f;hpb=8421c3a8da7485cb8781045494ecaab3ed84f403;p=senf.git diff --git a/Socket/ClientSocketHandle.hh b/Socket/ClientSocketHandle.hh index 38e7ea0..1eff5ce 100644 --- a/Socket/ClientSocketHandle.hh +++ b/Socket/ClientSocketHandle.hh @@ -30,6 +30,8 @@ // Custom includes #include #include +#include +#include #include "SocketHandle.hh" //#include "ClientSocketHandle.mpp" @@ -46,20 +48,23 @@ namespace senf { This class provides the client side policy interface of the socket abstraction. ClientSocketHandle defines the complete policy interface. It does not implement - any functionality itself however. All calls are forward to the following policy classes: + any functionality itself however. The following table shows, to which policy members each + group of ClientSocketHandle members is forwardd. The last collumn shows, on which other + policies this member-group depends in the default policy classes. If you define + your own policy classes, the dependencies are up to you. - - - - - - - - - - - + + + + + + + + + + +
ClientSocketHandle member Policy member
read() ReadPolicy::read (\ref senf::ReadPolicyBase)
readfrom() ReadPolicy::readfrom (\ref senf::ReadPolicyBase)
write() WritePolicy::write (\ref senf::WritePolicyBase)
writeto() WritePolicy::writeto (\ref senf::WritePolicyBase)
connect() AddressingPolicy::connect (\ref senf::AddressingPolicyBase)
bind() AddressingPolicy::bind (\ref senf::AddressingPolicyBase)
peer() AddressingPolicy::peer (\ref senf::AddressingPolicyBase)
local() AddressingPolicy::local (\ref senf::AddressingPolicyBase)
rcvbuf() BufferingPolicy::sndbuf (\ref senf::BufferingPolicyBase)
sndbuf() BufferingPolicy::rcvbuf (\ref senf::BufferingPolicyBase)
ClientSocketHandle member Policy member Other policies
read() ReadPolicy::read (\ref senf::ReadPolicyBase)
readfrom() ReadPolicy::readfrom (\ref senf::ReadPolicyBase) UnconnectedCommunicationPolicy
write() WritePolicy::write (\ref senf::WritePolicyBase) ConnectedCommunicationPolicy
writeto() WritePolicy::writeto (\ref senf::WritePolicyBase) UnconnectedCommunicationPolicy
connect() AddressingPolicy::connect (\ref senf::AddressingPolicyBase)
bind() AddressingPolicy::bind (\ref senf::AddressingPolicyBase)
peer() AddressingPolicy::peer (\ref senf::AddressingPolicyBase)
local() AddressingPolicy::local (\ref senf::AddressingPolicyBase)
rcvbuf() BufferingPolicy::sndbuf (\ref senf::BufferingPolicyBase)
sndbuf() BufferingPolicy::rcvbuf (\ref senf::BufferingPolicyBase)
It is important to note, that not all members are always accessible. Which are depends on @@ -118,13 +123,22 @@ namespace senf { ClientSocketHandle(); // conversion constructors +# ifndef DOXYGEN template ClientSocketHandle(ClientSocketHandle other, typename SocketHandle::template IsCompatible::type * = 0); +# else + ClientSocketHandle(ClientSocketHandle other); +# endif +# ifndef DOXYGEN template typename SocketHandle::template IsCompatible::type const & operator=(ClientSocketHandle other); +# else + template + OtherPolicy const & operator=(ClientSocketHandle other); +# endif ///@} /////////////////////////////////////////////////////////////////////////// @@ -165,6 +179,11 @@ namespace senf { */ std::string read (unsigned limit=0); template +# ifndef DOXYGEN + typename boost::range_iterator::type + read (ForwardWritableRange const & range, + typename boost::disable_if< boost::is_convertible >::type * = 0); +# else typename boost::range_iterator::type read (ForwardWritableRange const & range); ///< Read data into range @@ -174,11 +193,18 @@ namespace senf { range. read returns a past-the-end iterator after the last character read. This iterator will point to somewhere within the input range. - \param[in/out] range Range to store data in + \param[in,out] range Range to store data in \returns past-the-end iterator pointer to after the last read character \see \ref read() \n Boost.Range */ +# endif +# ifndef DOXYGEN + template + typename boost::range_iterator::type + read (ForwardWritableRange & range, + typename boost::disable_if< boost::is_convertible >::type * = 0); +# else template typename boost::range_iterator::type read (ForwardWritableRange & range); @@ -186,6 +212,7 @@ namespace senf { /**< \see read(ForwardWritableRange const &) \n read() \n Boost.Range */ +# endif template void read (Sequence & container, unsigned limit); ///< Read data into container @@ -235,7 +262,7 @@ namespace senf { range. read returns a past-the-end iterator after the last character read. This iterator will point to somewhere within the input range. - \param[in/out] range Range to store data in + \param[in,out] range Range to store data in \param[out] from peers address from which the data was received \returns past-the-end iterator pointer to after the @@ -263,14 +290,15 @@ namespace senf { \see \ref readfrom() */ char * readfrom (char * start, char * end, Address & from); ///< Read data into memory buffer - /**< This variant will read data into the memory area at \c - buffer of size \c size. This is the most performant - version of readfrom(). - \param[in] buffer address of buffer to store data at - \param[in] size size of buffer - \param[out] from peer address - \returns Number of bytes read - \see \ref readfrom() */ + /**< This variant will read data into the memory area from + \a start to before \a end. This is guaranteed to be the + most efficient version of readfrom(). + \param[in] start address of buffer to store data at + \param[in] end address one past the end of the buffer + \param[out] from peers address from which the data was + received + \returns pointer past the end of the data read + \see \ref read() */ /** \brief Write data to socket @@ -446,4 +474,6 @@ namespace senf { // c-file-style: "senf" // indent-tabs-mode: nil // ispell-local-dictionary: "american" +// compile-command: "scons -u test" +// comment-column: 40 // End: