X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Socket%2FClientSocketHandle.cti;h=f584a18e0b08bb5abd1093173fa3d8aea98debd4;hb=81ffa1c459b96dd44472bcef37e1e373934ee138;hp=8ff3396f005467ceca10d3b382b12853e415b6d3;hpb=7a1872f6702d6206bf1d8364c4e894f98d1c64f0;p=senf.git diff --git a/Socket/ClientSocketHandle.cti b/Socket/ClientSocketHandle.cti index 8ff3396..f584a18 100644 --- a/Socket/ClientSocketHandle.cti +++ b/Socket/ClientSocketHandle.cti @@ -35,29 +35,25 @@ /////////////////////////////////////////////////////////////////////////// // senf::detail::ReadRange -// senf::detail::ReadRange::read - template prefix_ typename boost::range_iterator::type senf::detail::ReadRange::read(Handle & handle, ForwardWritableRange & range) { - typename boost::range_iterator::type i (boost::begin(range)); - char * ic (reinterpret_cast(storage_iterator(i))); + typename boost::range_iterator::type const i (boost::begin(range)); + char * const ic (reinterpret_cast(storage_iterator(i))); return i + (handle.read( ic, reinterpret_cast(storage_iterator(boost::end(range))) ) - ic); } -// senf::detail::ReadRange::readfrom - template prefix_ typename boost::range_iterator::type senf::detail::ReadRange:: readfrom(Handle & handle, ForwardWritableRange & range, typename Handle::Address & addr) { - typename boost::range_iterator::type i (boost::begin(range)); - char * ic (reinterpret_cast(storage_iterator(i))); + typename boost::range_iterator::type const i (boost::begin(range)); + char * const ic (reinterpret_cast(storage_iterator(i))); return i + (handle.readfrom( ic, reinterpret_cast(storage_iterator(boost::end(range))), addr ) @@ -65,18 +61,62 @@ readfrom(Handle & handle, ForwardWritableRange & range, typename Handle::Address } /////////////////////////////////////////////////////////////////////////// +// senf::detail::WriteRange + +template +prefix_ typename boost::range_const_iterator::type +senf::detail::WriteRange:: +write(Handle & handle, ForwardReadableRange & range) +{ + typename boost::range_const_iterator::type const i + (boost::const_begin(range)); + char const * const ic (reinterpret_cast(storage_iterator(i))); + return i + (handle.write(ic, + reinterpret_cast( + storage_iterator(boost::const_end(range)))) + - ic); +} + +template +prefix_ typename boost::range_const_iterator::type +senf::detail::WriteRange:: +writeto(Handle & handle, ForwardReadableRange & range, typename Handle::Address const & addr) +{ + typename boost::range_const_iterator::type const i + (boost::const_begin(range)); + char const * const ic (reinterpret_cast(storage_iterator(i))); + return i + (handle.writeto(addr, + ic, + reinterpret_cast( + storage_iterator(boost::const_end(range)))) + - ic); +} + +/////////////////////////////////////////////////////////////////////////// // senf::ClientSocketHandle //////////////////////////////////////// // structors template +prefix_ senf::ClientSocketHandle::ClientSocketHandle() +{} + +#ifndef DOXYGEN +template template prefix_ senf::ClientSocketHandle:: ClientSocketHandle(ClientSocketHandle other, typename SocketHandle::template IsCompatible::type *) : SocketHandle(other,true) {} +#else +template +template +prefix_ senf::ClientSocketHandle:: +ClientSocketHandle(ClientSocketHandle other) +{} +#endif template prefix_ senf::ClientSocketHandle::ClientSocketHandle(FileHandle other, bool isChecked) @@ -92,6 +132,7 @@ senf::ClientSocketHandle::ClientSocketHandle(std::auto_ptrbody().fd(fd); } +#ifndef DOXYGEN template template prefix_ typename senf::SocketHandle::template IsCompatible::type const & @@ -100,16 +141,26 @@ senf::ClientSocketHandle::operator=(ClientSocketHandle othe assign(other); return *this; } +#else +template +template +prefix_ OtherPolicy const & +senf::ClientSocketHandle::operator=(ClientSocketHandle other) +{} +#endif //////////////////////////////////////// // reading and writing // senf::ClientSocketHandle::read +#ifndef DOXYGEN template template prefix_ typename boost::range_iterator::type -senf::ClientSocketHandle::read(ForwardWritableRange const & range) +senf::ClientSocketHandle:: +read(ForwardWritableRange const & range, + typename boost::disable_if< boost::is_convertible >::type *) { return detail::ReadRange< ClientSocketHandle, @@ -119,11 +170,22 @@ senf::ClientSocketHandle::read(ForwardWritableRange const & range) >::value && sizeof(typename boost::range_value::type)==sizeof(char) >::read(*this, range); } +#else +template +template +prefix_ typename boost::range_iterator::type +senf::ClientSocketHandle:: +read(ForwardWritableRange const & range) +{} +#endif +#ifndef DOXYGEN template template prefix_ typename boost::range_iterator::type -senf::ClientSocketHandle::read(ForwardWritableRange & range) +senf::ClientSocketHandle:: +read(ForwardWritableRange & range, + typename boost::disable_if< boost::is_convertible >::type *) { return detail::ReadRange< ClientSocketHandle, @@ -133,6 +195,14 @@ senf::ClientSocketHandle::read(ForwardWritableRange & range) >::value && sizeof(typename boost::range_value::type)==sizeof(char) >::read(*this, range); } +#else +template +template +prefix_ typename boost::range_iterator::type +senf::ClientSocketHandle:: +read(ForwardWritableRange & range) +{} +#endif template prefix_ char * senf::ClientSocketHandle::read(char * start, char * end) @@ -144,7 +214,7 @@ prefix_ char * senf::ClientSocketHandle::read(char * start, char * end) template template -prefix_ typename boost::range_iterator::type +prefix_ typename boost::range_iterator::type senf::ClientSocketHandle::readfrom(ForwardWritableRange const & range, Address & from) { return detail::ReadRange< @@ -180,28 +250,47 @@ prefix_ char * senf::ClientSocketHandle::readfrom(char * start, char * e // senf::ClientSocketHandle::write template -prefix_ unsigned senf::ClientSocketHandle::write(char const * buffer, - unsigned size) +template +prefix_ typename boost::range_const_iterator::type +senf::ClientSocketHandle::write(ForwardReadableRange const & range) { - return Policy::WritePolicy::write(*this, buffer, size); + return detail::WriteRange< + ClientSocketHandle, + ForwardReadableRange const, + contiguous_storage_iterator< + typename boost::range_iterator::type + >::value && sizeof(typename boost::range_value::type)==sizeof(char) + >::write(*this, range); +} + +template +prefix_ char const * senf::ClientSocketHandle::write(char const * start, char const * end) +{ + return start + Policy::WritePolicy::write(*this, start, end-start); } // senf::ClientSocketHandle::writeto template -prefix_ unsigned senf::ClientSocketHandle:: -writeto(typename boost::call_traits::param_type addr, - std::string const & data) +template +prefix_ typename boost::range_const_iterator::type +senf::ClientSocketHandle::writeto(AddressParam addr, ForwardReadableRange const & range) { - return this->writeto(addr, data.data(), data.size()); + return detail::WriteRange< + ClientSocketHandle, + ForwardReadableRange const, + contiguous_storage_iterator< + typename boost::range_iterator::type + >::value && sizeof(typename boost::range_value::type)==sizeof(char) + >::writeto(*this, range, addr); } template -prefix_ unsigned senf::ClientSocketHandle:: -writeto(typename boost::call_traits::param_type addr, - char const * buffer, unsigned size) +prefix_ char const * senf::ClientSocketHandle::writeto(AddressParam addr, + char const * start, + char const * end) { - return Policy::WritePolicy::writeto(*this, addr, buffer, size); + return start + Policy::WritePolicy::writeto(*this, addr, start, end-start); } //////////////////////////////////////// @@ -339,4 +428,6 @@ prefix_ std::string senf::ClientSocketHandle::dumpState(unsigned lod) // c-file-style: "senf" // indent-tabs-mode: nil // ispell-local-dictionary: "american" +// compile-command: "scons -u test" +// comment-column: 40 // End: