Update of /cvsroot/boost/boost/boost/asio/impl
In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv17073/boost/asio/impl
Modified Files:
read.ipp read_until.ipp write.ipp
Log Message:
Change error handling to match TR2 proposal.
Index: read.ipp
===================================================================
RCS file: /cvsroot/boost/boost/boost/asio/impl/read.ipp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- read.ipp 4 Nov 2006 07:14:09 -0000 1.5
+++ read.ipp 8 Nov 2006 05:32:12 -0000 1.6
@@ -19,44 +19,43 @@
#include <boost/asio/buffer.hpp>
#include <boost/asio/completion_condition.hpp>
-#include <boost/asio/error_handler.hpp>
+#include <boost/asio/error.hpp>
#include <boost/asio/detail/bind_handler.hpp>
#include <boost/asio/detail/consuming_buffers.hpp>
#include <boost/asio/detail/handler_alloc_helpers.hpp>
#include <boost/asio/detail/handler_invoke_helpers.hpp>
+#include <boost/asio/detail/throw_error.hpp>
namespace boost {
namespace asio {
template <typename Sync_Read_Stream, typename Mutable_Buffers,
- typename Completion_Condition, typename Error_Handler>
+ typename Completion_Condition>
std::size_t read(Sync_Read_Stream& s, const Mutable_Buffers& buffers,
- Completion_Condition completion_condition, Error_Handler error_handler)
+ Completion_Condition completion_condition, boost::system::error_code& ec)
{
boost::asio::detail::consuming_buffers<
mutable_buffer, Mutable_Buffers> tmp(buffers);
std::size_t total_transferred = 0;
while (tmp.begin() != tmp.end())
{
- typename Sync_Read_Stream::error_type e;
- std::size_t bytes_transferred = s.read_some(tmp, assign_error(e));
+ std::size_t bytes_transferred = s.read_some(tmp, ec);
tmp.consume(bytes_transferred);
total_transferred += bytes_transferred;
- if (completion_condition(e, total_transferred))
- {
- error_handler(e);
+ if (completion_condition(ec, total_transferred))
return total_transferred;
- }
}
- typename Sync_Read_Stream::error_type e;
- error_handler(e);
+ ec = boost::system::error_code();
return total_transferred;
}
template <typename Sync_Read_Stream, typename Mutable_Buffers>
inline std::size_t read(Sync_Read_Stream& s, const Mutable_Buffers& buffers)
{
- return read(s, buffers, transfer_all(), throw_error());
+ boost::system::error_code ec;
+ std::size_t bytes_transferred = read(s, buffers, transfer_all(), ec);
+ boost::asio::detail::throw_error(ec);
+ return bytes_transferred;
}
template <typename Sync_Read_Stream, typename Mutable_Buffers,
@@ -64,28 +63,26 @@
inline std::size_t read(Sync_Read_Stream& s, const Mutable_Buffers& buffers,
Completion_Condition completion_condition)
{
- return read(s, buffers, completion_condition, throw_error());
+ boost::system::error_code ec;
+ std::size_t bytes_transferred = read(s, buffers, completion_condition, ec);
+ boost::asio::detail::throw_error(ec);
+ return bytes_transferred;
}
template <typename Sync_Read_Stream, typename Allocator,
- typename Completion_Condition, typename Error_Handler>
+ typename Completion_Condition>
std::size_t read(Sync_Read_Stream& s,
boost::asio::basic_streambuf<Allocator>& b,
- Completion_Condition completion_condition, Error_Handler error_handler)
+ Completion_Condition completion_condition, boost::system::error_code& ec)
{
std::size_t total_transferred = 0;
for (;;)
{
- typename Sync_Read_Stream::error_type e;
- std::size_t bytes_transferred = s.read_some(
- b.prepare(512), assign_error(e));
+ std::size_t bytes_transferred = s.read_some(b.prepare(512), ec);
b.commit(bytes_transferred);
total_transferred += bytes_transferred;
- if (completion_condition(e, total_transferred))
- {
- error_handler(e);
+ if (completion_condition(ec, total_transferred))
return total_transferred;
- }
}
}
@@ -93,7 +90,10 @@
inline std::size_t read(Sync_Read_Stream& s,
boost::asio::basic_streambuf<Allocator>& b)
{
- return read(s, b, transfer_all(), throw_error());
+ boost::system::error_code ec;
+ std::size_t bytes_transferred = read(s, b, transfer_all(), ec);
+ boost::asio::detail::throw_error(ec);
+ return bytes_transferred;
}
template <typename Sync_Read_Stream, typename Allocator,
@@ -102,7 +102,10 @@
boost::asio::basic_streambuf<Allocator>& b,
Completion_Condition completion_condition)
{
- return read(s, b, completion_condition, throw_error());
+ boost::system::error_code ec;
+ std::size_t bytes_transferred = read(s, b, completion_condition, ec);
+ boost::asio::detail::throw_error(ec);
+ return bytes_transferred;
}
namespace detail
@@ -122,15 +125,15 @@
{
}
- void operator()(const typename Async_Read_Stream::error_type& e,
+ void operator()(const boost::system::error_code& ec,
std::size_t bytes_transferred)
{
total_transferred_ += bytes_transferred;
buffers_.consume(bytes_transferred);
- if (completion_condition_(e, total_transferred_)
+ if (completion_condition_(ec, total_transferred_)
|| buffers_.begin() == buffers_.end())
{
- handler_(e, total_transferred_);
+ handler_(ec, total_transferred_);
}
else
{
@@ -215,14 +218,14 @@
{
}
- void operator()(const typename Async_Read_Stream::error_type& e,
+ void operator()(const boost::system::error_code& ec,
std::size_t bytes_transferred)
{
total_transferred_ += bytes_transferred;
streambuf_.commit(bytes_transferred);
- if (completion_condition_(e, total_transferred_))
+ if (completion_condition_(ec, total_transferred_))
{
- handler_(e, total_transferred_);
+ handler_(ec, total_transferred_);
}
else
{
Index: read_until.ipp
===================================================================
RCS file: /cvsroot/boost/boost/boost/asio/impl/read_until.ipp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- read_until.ipp 4 Nov 2006 07:14:09 -0000 1.5
+++ read_until.ipp 8 Nov 2006 05:32:12 -0000 1.6
@@ -25,11 +25,11 @@
#include <boost/asio/detail/pop_options.hpp>
#include <boost/asio/buffer.hpp>
-#include <boost/asio/error_handler.hpp>
#include <boost/asio/detail/bind_handler.hpp>
#include <boost/asio/detail/const_buffers_iterator.hpp>
#include <boost/asio/detail/handler_alloc_helpers.hpp>
#include <boost/asio/detail/handler_invoke_helpers.hpp>
+#include <boost/asio/detail/throw_error.hpp>
namespace boost {
namespace asio {
@@ -38,13 +38,16 @@
inline std::size_t read_until(Sync_Read_Stream& s,
boost::asio::basic_streambuf<Allocator>& b, char delim)
{
- return read_until(s, b, delim, throw_error());
+ boost::system::error_code ec;
+ std::size_t bytes_transferred = read_until(s, b, delim, ec);
+ boost::asio::detail::throw_error(ec);
+ return bytes_transferred;
}
-template <typename Sync_Read_Stream, typename Allocator, typename
Error_Handler>
+template <typename Sync_Read_Stream, typename Allocator>
std::size_t read_until(Sync_Read_Stream& s,
boost::asio::basic_streambuf<Allocator>& b, char delim,
- Error_Handler error_handler)
+ boost::system::error_code& ec)
{
std::size_t next_search_start = 0;
for (;;)
@@ -63,6 +66,7 @@
if (iter != end)
{
// Found a match. We're done.
+ ec = boost::system::error_code();
return iter.position() + 1;
}
else
@@ -72,13 +76,9 @@
}
// Need more data.
- typename Sync_Read_Stream::error_type error;
- b.commit(s.read_some(b.prepare(512), boost::asio::assign_error(error)));
- if (error)
- {
- error_handler(error);
+ b.commit(s.read_some(b.prepare(512), ec));
+ if (ec)
return 0;
- }
}
}
@@ -86,7 +86,10 @@
inline std::size_t read_until(Sync_Read_Stream& s,
boost::asio::basic_streambuf<Allocator>& b, const std::string& delim)
{
- return read_until(s, b, delim, throw_error());
+ boost::system::error_code ec;
+ std::size_t bytes_transferred = read_until(s, b, delim, ec);
+ boost::asio::detail::throw_error(ec);
+ return bytes_transferred;
}
namespace detail
@@ -124,10 +127,10 @@
}
} // namespace detail
-template <typename Sync_Read_Stream, typename Allocator, typename
Error_Handler>
+template <typename Sync_Read_Stream, typename Allocator>
std::size_t read_until(Sync_Read_Stream& s,
boost::asio::basic_streambuf<Allocator>& b, const std::string& delim,
- Error_Handler error_handler)
+ boost::system::error_code& ec)
{
std::size_t next_search_start = 0;
for (;;)
@@ -149,6 +152,7 @@
if (result.second)
{
// Full match. We're done.
+ ec = boost::system::error_code();
return result.first.position() + delim.length();
}
else
@@ -164,13 +168,9 @@
}
// Need more data.
- typename Sync_Read_Stream::error_type error;
- b.commit(s.read_some(b.prepare(512), boost::asio::assign_error(error)));
- if (error)
- {
- error_handler(error);
+ b.commit(s.read_some(b.prepare(512), ec));
+ if (ec)
return 0;
- }
}
}
@@ -178,13 +178,16 @@
inline std::size_t read_until(Sync_Read_Stream& s,
boost::asio::basic_streambuf<Allocator>& b, const boost::regex& expr)
{
- return read_until(s, b, expr, throw_error());
+ boost::system::error_code ec;
+ std::size_t bytes_transferred = read_until(s, b, expr, ec);
+ boost::asio::detail::throw_error(ec);
+ return bytes_transferred;
}
-template <typename Sync_Read_Stream, typename Allocator, typename
Error_Handler>
+template <typename Sync_Read_Stream, typename Allocator>
std::size_t read_until(Sync_Read_Stream& s,
boost::asio::basic_streambuf<Allocator>& b, const boost::regex& expr,
- Error_Handler error_handler)
+ boost::system::error_code& ec)
{
std::size_t next_search_start = 0;
for (;;)
@@ -206,6 +209,7 @@
if (match_results[0].matched)
{
// Full match. We're done.
+ ec = boost::system::error_code();
return match_results[0].second.position();
}
else
@@ -221,13 +225,9 @@
}
// Need more data.
- typename Sync_Read_Stream::error_type error;
- b.commit(s.read_some(b.prepare(512), boost::asio::assign_error(error)));
- if (error)
- {
- error_handler(error);
+ b.commit(s.read_some(b.prepare(512), ec));
+ if (ec)
return 0;
- }
}
}
@@ -248,14 +248,14 @@
{
}
- void operator()(const typename Async_Read_Stream::error_type& e,
+ void operator()(const boost::system::error_code& ec,
std::size_t bytes_transferred)
{
// Check for errors.
- if (e)
+ if (ec)
{
std::size_t bytes = 0;
- handler_(e, bytes);
+ handler_(ec, bytes);
return;
}
@@ -277,7 +277,7 @@
{
// Found a match. We're done.
std::size_t bytes = iter.position() + 1;
- handler_(e, bytes);
+ handler_(ec, bytes);
return;
}
@@ -341,9 +341,9 @@
if (iter != end)
{
// Found a match. We're done.
- typename Async_Read_Stream::error_type error;
+ boost::system::error_code ec;
std::size_t bytes = iter.position() + 1;
- s.io_service().post(detail::bind_handler(handler, error, bytes));
+ s.io_service().post(detail::bind_handler(handler, ec, bytes));
return;
}
@@ -371,14 +371,14 @@
{
}
- void operator()(const typename Async_Read_Stream::error_type& e,
+ void operator()(const boost::system::error_code& ec,
std::size_t bytes_transferred)
{
// Check for errors.
- if (e)
+ if (ec)
{
std::size_t bytes = 0;
- handler_(e, bytes);
+ handler_(ec, bytes);
return;
}
@@ -403,7 +403,7 @@
{
// Full match. We're done.
std::size_t bytes = result.first.position() + delim_.length();
- handler_(e, bytes);
+ handler_(ec, bytes);
return;
}
else
@@ -482,9 +482,9 @@
if (result.second)
{
// Full match. We're done.
- typename Async_Read_Stream::error_type error;
+ boost::system::error_code ec;
std::size_t bytes = result.first.position() + delim.length();
- s.io_service().post(detail::bind_handler(handler, error, bytes));
+ s.io_service().post(detail::bind_handler(handler, ec, bytes));
return;
}
else
@@ -524,14 +524,14 @@
{
}
- void operator()(const typename Async_Read_Stream::error_type& e,
+ void operator()(const boost::system::error_code& ec,
std::size_t bytes_transferred)
{
// Check for errors.
- if (e)
+ if (ec)
{
std::size_t bytes = 0;
- handler_(e, bytes);
+ handler_(ec, bytes);
return;
}
@@ -556,7 +556,7 @@
{
// Full match. We're done.
std::size_t bytes = match_results[0].second.position();
- handler_(e, bytes);
+ handler_(ec, bytes);
return;
}
else
@@ -635,9 +635,9 @@
if (match_results[0].matched)
{
// Full match. We're done.
- typename Async_Read_Stream::error_type error;
+ boost::system::error_code ec;
std::size_t bytes = match_results[0].second.position();
- s.io_service().post(detail::bind_handler(handler, error, bytes));
+ s.io_service().post(detail::bind_handler(handler, ec, bytes));
return;
}
else
Index: write.ipp
===================================================================
RCS file: /cvsroot/boost/boost/boost/asio/impl/write.ipp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- write.ipp 4 Nov 2006 07:14:09 -0000 1.4
+++ write.ipp 8 Nov 2006 05:32:12 -0000 1.5
@@ -19,44 +19,42 @@
#include <boost/asio/buffer.hpp>
#include <boost/asio/completion_condition.hpp>
-#include <boost/asio/error_handler.hpp>
#include <boost/asio/detail/bind_handler.hpp>
#include <boost/asio/detail/consuming_buffers.hpp>
#include <boost/asio/detail/handler_alloc_helpers.hpp>
#include <boost/asio/detail/handler_invoke_helpers.hpp>
+#include <boost/asio/detail/throw_error.hpp>
namespace boost {
namespace asio {
template <typename Sync_Write_Stream, typename Const_Buffers,
- typename Completion_Condition, typename Error_Handler>
+ typename Completion_Condition>
std::size_t write(Sync_Write_Stream& s, const Const_Buffers& buffers,
- Completion_Condition completion_condition, Error_Handler error_handler)
+ Completion_Condition completion_condition, boost::system::error_code& ec)
{
boost::asio::detail::consuming_buffers<
const_buffer, Const_Buffers> tmp(buffers);
std::size_t total_transferred = 0;
while (tmp.begin() != tmp.end())
{
- typename Sync_Write_Stream::error_type e;
- std::size_t bytes_transferred = s.write_some(tmp, assign_error(e));
+ std::size_t bytes_transferred = s.write_some(tmp, ec);
tmp.consume(bytes_transferred);
total_transferred += bytes_transferred;
- if (completion_condition(e, total_transferred))
- {
- error_handler(e);
+ if (completion_condition(ec, total_transferred))
return total_transferred;
- }
}
- typename Sync_Write_Stream::error_type e;
- error_handler(e);
+ ec = boost::system::error_code();
return total_transferred;
}
template <typename Sync_Write_Stream, typename Const_Buffers>
inline std::size_t write(Sync_Write_Stream& s, const Const_Buffers& buffers)
{
- return write(s, buffers, transfer_all(), throw_error());
+ boost::system::error_code ec;
+ std::size_t bytes_transferred = write(s, buffers, transfer_all(), ec);
+ boost::asio::detail::throw_error(ec);
+ return bytes_transferred;
}
template <typename Sync_Write_Stream, typename Const_Buffers,
@@ -64,20 +62,20 @@
inline std::size_t write(Sync_Write_Stream& s, const Const_Buffers& buffers,
Completion_Condition completion_condition)
{
- return write(s, buffers, completion_condition, throw_error());
+ boost::system::error_code ec;
+ std::size_t bytes_transferred = write(s, buffers, completion_condition, ec);
+ boost::asio::detail::throw_error(ec);
+ return bytes_transferred;
}
template <typename Sync_Write_Stream, typename Allocator,
- typename Completion_Condition, typename Error_Handler>
+ typename Completion_Condition>
std::size_t write(Sync_Write_Stream& s,
boost::asio::basic_streambuf<Allocator>& b,
- Completion_Condition completion_condition, Error_Handler error_handler)
+ Completion_Condition completion_condition, boost::system::error_code& ec)
{
- typename Sync_Write_Stream::error_type error;
- std::size_t bytes_transferred = write(s, b.data(),
- completion_condition, boost::asio::assign_error(error));
+ std::size_t bytes_transferred = write(s, b.data(), completion_condition, ec);
b.consume(bytes_transferred);
- error_handler(error);
return bytes_transferred;
}
@@ -85,7 +83,10 @@
inline std::size_t write(Sync_Write_Stream& s,
boost::asio::basic_streambuf<Allocator>& b)
{
- return write(s, b, transfer_all(), throw_error());
+ boost::system::error_code ec;
+ std::size_t bytes_transferred = write(s, b, transfer_all(), ec);
+ boost::asio::detail::throw_error(ec);
+ return bytes_transferred;
}
template <typename Sync_Write_Stream, typename Allocator,
@@ -94,7 +95,10 @@
boost::asio::basic_streambuf<Allocator>& b,
Completion_Condition completion_condition)
{
- return write(s, b, completion_condition, throw_error());
+ boost::system::error_code ec;
+ std::size_t bytes_transferred = write(s, b, completion_condition, ec);
+ boost::asio::detail::throw_error(ec);
+ return bytes_transferred;
}
namespace detail
@@ -114,15 +118,15 @@
{
}
- void operator()(const typename Async_Write_Stream::error_type& e,
+ void operator()(const boost::system::error_code& ec,
std::size_t bytes_transferred)
{
total_transferred_ += bytes_transferred;
buffers_.consume(bytes_transferred);
- if (completion_condition_(e, total_transferred_)
+ if (completion_condition_(ec, total_transferred_)
|| buffers_.begin() == buffers_.end())
{
- handler_(e, total_transferred_);
+ handler_(ec, total_transferred_);
}
else
{
@@ -201,11 +205,11 @@
{
}
- void operator()(const typename Async_Write_Stream::error_type& e,
+ void operator()(const boost::system::error_code& ec,
std::size_t bytes_transferred)
{
streambuf_.consume(bytes_transferred);
- handler_(e, bytes_transferred);
+ handler_(ec, bytes_transferred);
}
//private:
-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Boost-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/boost-cvs