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

Reply via email to