X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Socket%2FClientSocketHandle.hh;h=07f20693057c1a9f0e96dd5dfc86ab7b5c8bb22c;hb=5457377c2eda70c535303f6cf87413bbb51bf1ea;hp=368e3cdb3d1c86bd0015beaaacbd9fcaa9b37893;hpb=11e54a3241bf7c58b4b418a24abea04d12a683aa;p=senf.git diff --git a/Socket/ClientSocketHandle.hh b/Socket/ClientSocketHandle.hh index 368e3cd..07f2069 100644 --- a/Socket/ClientSocketHandle.hh +++ b/Socket/ClientSocketHandle.hh @@ -46,20 +46,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 @@ -79,15 +82,12 @@ namespace senf { typelist of Poclicy classes which can be accessed. You use protocol() to access a protocol class. \c Policies can of course be underspecified or even empty. - \idea add more flexible read/write members for a) boost::arrays and arrays of other types b) - std::vector (which uses contiguous memory ..) c) other random-access containers (we should - use some configurable trait class to identify containers with contiguous storage). Probably - we should just use a generic Boost.Range interface. Here we again come to the point: make - all except the most basic members be non-member algorithms ? this would make the - configuration of such extenden members more flexible. - \see \ref policy_group \n \ref protocol_group + + \fixme Add enable_if conditions so anything convertible to unsigned will not be interpreted + as a Range template argument but will use the unsigned variant of + read/readfrom/write/writeto. */ template class ClientSocketHandle @@ -116,11 +116,14 @@ namespace senf { ///\name Structors and default members ///@{ - // no default constructor + // default default constructor // default copy constructor // default copy assignment // default destructor + // here to implement + ClientSocketHandle(); + // conversion constructors template ClientSocketHandle(ClientSocketHandle other, @@ -178,17 +181,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() */ + \see \ref read() \n + Boost.Range */ template typename boost::range_iterator::type read (ForwardWritableRange & range); ///< Read data into range - /**< \see - read(ForwardWritableRange const &) \n - read() */ + /**< \see read(ForwardWritableRange const &) \n + read() \n + Boost.Range */ template void read (Sequence & container, unsigned limit); ///< Read data into container @@ -238,19 +242,20 @@ 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 last read character - \see \ref readfrom() */ + \see \ref readfrom() \n + Boost.Range */ template typename boost::range_iterator::type readfrom (ForwardWritableRange & range, Address & from); ///< Read data into range - /**< \see - readfrom(ForwardWritableRange const&,Address&) \n - readfrom() */ + /**< \see readfrom(ForwardWritableRange const&,Address&) \n + readfrom() \n + Boost.Range */ template void readfrom (Sequence & container, Address & from, unsigned limit); ///< Read data into container @@ -265,14 +270,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 @@ -303,7 +309,8 @@ namespace senf { /**< \param[in] start beginning of area to write \param[in] end past-the-end pointer to area to write \returns past-the-end pointer after last byte written - \see \ref write() */ + \see \ref write() \n + Boost.Range */ /** \brief Write data to unconnected socket @@ -332,7 +339,8 @@ namespace senf { \param[in] start address of buffer to write \param[in] end past-the-end pointer after data to write \returns past-the-end iterator after last byte written - \see \ref writeto() */ + \see \ref writeto() \n + Boost.Range */ /////////////////////////////////////////////////////////////////////////// ///\name Addressing @@ -446,4 +454,6 @@ namespace senf { // c-file-style: "senf" // indent-tabs-mode: nil // ispell-local-dictionary: "american" +// compile-command: "scons -u test" +// comment-column: 40 // End: