Update of /cvsroot/boost/boost/boost/asio
In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv29856/boost/asio

Modified Files:
        read_until.hpp 
Log Message:
Add overloads of read_until and async_read_until that take a string. Fix
bug in regex-based overload of async_read_until.


Index: read_until.hpp
===================================================================
RCS file: /cvsroot/boost/boost/boost/asio/read_until.hpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- read_until.hpp      18 Jun 2006 08:01:10 -0000      1.2
+++ read_until.hpp      9 Jul 2006 07:08:03 -0000       1.3
@@ -21,6 +21,7 @@
 #include <cstddef>
 #include <boost/config.hpp>
 #include <boost/regex.hpp>
+#include <string>
 #include <boost/asio/detail/pop_options.hpp>
 
 #include <boost/asio/basic_streambuf.hpp>
@@ -115,6 +116,88 @@
     boost::asio::basic_streambuf<Allocator>& b, char delim,
     Error_Handler error_handler);
 
+/// Read data into a streambuf until a delimiter is encountered.
+/**
+ * This function is used to read data into the specified streambuf until the
+ * streambuf's get area contains the specified delimiter. The call will block
+ * until one of the following conditions is true:
+ *
+ * @li The get area of the streambuf contains the specified delimiter.
+ *
+ * @li An error occurred.
+ *
+ * This operation is implemented in terms of zero or more calls to the stream's
+ * read_some function. If the streambuf's get area already contains the
+ * delimiter, the function returns immediately.
+ *
+ * @param s The stream from which the data is to be read. The type must support
+ * the Sync_Read_Stream concept.
+ *
+ * @param b A streambuf object into which the data will be read.
+ *
+ * @param delim The delimiter string.
+ *
+ * @returns The number of bytes in the streambuf's get area up to and including
+ * the delimiter.
+ *
+ * @throws Sync_Read_Stream::error_type Thrown on failure.
+ *
+ * @par Example:
+ * To read data into a streambuf until a newline is encountered:
+ * @code boost::asio::streambuf b;
+ * boost::asio::read_until(s, b, "\r\n");
+ * std::istream is(&b);
+ * std::string line;
+ * std::getline(is, line); @endcode
+ *
+ * @note This overload is equivalent to calling:
+ * @code boost::asio::read_until(
+ *     s, b, delim,
+ *     boost::asio::throw_error()); @endcode
+ */
+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);
+
+/// Read data into a streambuf until a delimiter is encountered.
+/**
+ * This function is used to read data into the specified streambuf until the
+ * streambuf's get area contains the specified delimiter. The call will block
+ * until one of the following conditions is true:
+ *
+ * @li The get area of the streambuf contains the specified delimiter.
+ *
+ * @li An error occurred.
+ *
+ * This operation is implemented in terms of zero or more calls to the stream's
+ * read_some function. If the streambuf's get area already contains the
+ * delimiter, the function returns immediately.
+ *
+ * @param s The stream from which the data is to be read. The type must support
+ * the Sync_Read_Stream concept.
+ *
+ * @param b A streambuf object into which the data will be read.
+ *
+ * @param delim The delimiter string.
+ *
+ * @param error_handler A handler to be called when the operation completes,
+ * to indicate whether or not an error has occurred. Copies will be made of
+ * the handler as required. The function signature of the handler must be:
+ * @code void error_handler(
+ *   const Sync_Read_Stream::error_type& error // Result of operation.
+ * ); @endcode
+ * The error handler is only called if the completion_condition indicates that
+ * the operation is complete.
+ *
+ * @returns The number of bytes in the streambuf's get area up to and including
+ * the delimiter. Returns 0 if an error occurred and the error handler did not
+ * throw an exception.
+ */
+template <typename Sync_Read_Stream, typename Allocator, typename 
Error_Handler>
+std::size_t read_until(Sync_Read_Stream& s,
+    boost::asio::basic_streambuf<Allocator>& b, const std::string& delim,
+    Error_Handler error_handler);
+
 /// Read data into a streambuf until a regular expression is located.
 /**
  * This function is used to read data into the specified streambuf until the
@@ -265,6 +348,69 @@
   boost::asio::basic_streambuf<Allocator>& b, char delim, Handler handler);
 
 /// Start an asynchronous operation to read data into a streambuf until a
+/// delimiter is encountered.
+/**
+ * This function is used to asynchronously read data into the specified
+ * streambuf until the streambuf's get area contains the specified delimiter.
+ * The function call always returns immediately. The asynchronous operation
+ * will continue until one of the following conditions is true:
+ *
+ * @li The get area of the streambuf contains the specified delimiter.
+ *
+ * @li An error occurred.
+ *
+ * This operation is implemented in terms of zero or more calls to the stream's
+ * async_read_some function. If the streambuf's get area already contains the
+ * delimiter, the asynchronous operation completes immediately.
+ *
+ * @param s The stream from which the data is to be read. The type must support
+ * the Async_Read_Stream concept.
+ *
+ * @param b A streambuf object into which the data will be read. Ownership of
+ * the streambuf is retained by the caller, which must guarantee that it 
remains
+ * valid until the handler is called.
+ *
+ * @param delim The delimiter string.
+ *
+ * @param handler The handler to be called when the read operation completes.
+ * Copies will be made of the handler as required. The function signature of 
the
+ * handler must be:
+ * @code void handler(
+ *   const Async_Read_Stream::error_type& error, // Result of operation.
+ *
+ *   std::size_t bytes_transferred               // The number of bytes in the
+ *                                               // streambuf's get area up to
+ *                                               // and including the 
delimiter.
+ *                                               // 0 if an error occurred.
+ * ); @endcode
+ * Regardless of whether the asynchronous operation completes immediately or
+ * not, the handler will not be invoked from within this function. Invocation 
of
+ * the handler will be performed in a manner equivalent to using
+ * boost::asio::io_service::post().
+ *
+ * @par Example:
+ * To asynchronously read data into a streambuf until a newline is encountered:
+ * @code boost::asio::streambuf b;
+ * ...
+ * void handler(const boost::asio::error& e, std::size_t size)
+ * {
+ *   if (!e)
+ *   {
+ *     std::istream is(&b);
+ *     std::string line;
+ *     std::getline(is, line);
+ *     ...
+ *   }
+ * }
+ * ...
+ * boost::asio::async_read_until(s, b, "\r\n", handler); @endcode
+ */
+template <typename Async_Read_Stream, typename Allocator, typename Handler>
+void async_read_until(Async_Read_Stream& s,
+  boost::asio::basic_streambuf<Allocator>& b, const std::string& delim,
+  Handler handler);
+
+/// Start an asynchronous operation to read data into a streambuf until a
 /// regular expression is located.
 /**
  * This function is used to asynchronously read data into the specified



-------------------------------------------------------------------------
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