2
0
mirror of https://github.com/boostorg/asio.git synced 2026-01-28 18:52:09 +00:00
Files
asio/test/buffers_iterator.cpp
Christopher Kohlhoff 43174fd619 Merged from trunk to release branch.
........
  r44662 | chris_kohlhoff | 2008-04-21 11:23:42 +1000 (Mon, 21 Apr 2008) | 3 lines
  
  Add ability to disable the uses of the typeid operator by defining
  BOOST_NO_TYPEID or BOOST_ASIO_NO_TYPEID.
........
  r44663 | chris_kohlhoff | 2008-04-21 11:27:48 +1000 (Mon, 21 Apr 2008) | 3 lines
  
  Ensure that timer dispatching responsibility is correctly relinquished when
  processing leftover interrupts from a previous run invocation.
........
  r44665 | chris_kohlhoff | 2008-04-21 11:36:28 +1000 (Mon, 21 Apr 2008) | 3 lines
  
  Enhance example to make it clear that invocation hooking can be used with
  asynchronous operations.
........
  r44666 | chris_kohlhoff | 2008-04-21 11:39:06 +1000 (Mon, 21 Apr 2008) | 3 lines
  
  Improve efficiency of basic_streambuf::consume() by using a single call to
  gbump() rather than calling sbumpc() in a loop.
........
  r44667 | chris_kohlhoff | 2008-04-21 11:41:29 +1000 (Mon, 21 Apr 2008) | 2 lines
  
  Update version number to match release.
........
  r44668 | chris_kohlhoff | 2008-04-21 11:42:10 +1000 (Mon, 21 Apr 2008) | 2 lines
  
  Fix infinite recursion in the ssl::stream's shutdown() implementation.
........
  r44670 | chris_kohlhoff | 2008-04-21 12:01:34 +1000 (Mon, 21 Apr 2008) | 2 lines
  
  Improve documentation for the protected functions and data in basic_io_object<>.
........
  r44673 | chris_kohlhoff | 2008-04-21 14:02:37 +1000 (Mon, 21 Apr 2008) | 4 lines
  
  Add a special null_buffers type that allows read and write operations to
  be used to indicate the socket's readiness to read or write without
  blocking.
........
  r44674 | chris_kohlhoff | 2008-04-21 14:43:05 +1000 (Mon, 21 Apr 2008) | 2 lines
  
  Add support for UNIX domain sockets.
........
  r44675 | chris_kohlhoff | 2008-04-21 15:16:15 +1000 (Mon, 21 Apr 2008) | 2 lines
  
  Add new wrapper classes for stream-oriented file descriptors on POSIX platforms.
........
  r44676 | chris_kohlhoff | 2008-04-21 15:32:34 +1000 (Mon, 21 Apr 2008) | 2 lines
  
  Add new wrapper classes for stream-oriented handles on Windows.
........
  r44678 | chris_kohlhoff | 2008-04-21 15:43:42 +1000 (Mon, 21 Apr 2008) | 3 lines
  
  Add porthopper example to demonstrate applications that mix synchronous and
  asynchronous operations.
........
  r44679 | chris_kohlhoff | 2008-04-21 15:52:20 +1000 (Mon, 21 Apr 2008) | 3 lines
  
  Remove a local variable that was hiding the ec parameter and preventing
  error codes from being correctly propagated. Fixes #1820.
........
  r44681 | chris_kohlhoff | 2008-04-21 16:14:29 +1000 (Mon, 21 Apr 2008) | 2 lines
  
  Ensure all non-friend related functions are included in the documentation.
........
  r44682 | chris_kohlhoff | 2008-04-21 16:15:17 +1000 (Mon, 21 Apr 2008) | 3 lines
  
  Add UNIX domain sockets, POSIX stream-oriented descriptors and Windows
  stream-oriented handles to the reference documentation.
........
  r44683 | chris_kohlhoff | 2008-04-21 16:15:50 +1000 (Mon, 21 Apr 2008) | 2 lines
  
  Regenerate documentation.
........
  r44684 | chris_kohlhoff | 2008-04-21 16:20:32 +1000 (Mon, 21 Apr 2008) | 3 lines
  
  Add documentation on the limits of the number of buffers that may be
  transferred in individual operations.
........
  r44685 | chris_kohlhoff | 2008-04-21 17:59:21 +1000 (Mon, 21 Apr 2008) | 3 lines
  
  Add requirements for handle and descriptor services. Add new classes to the
  quickref index page.
........
  r44727 | chris_kohlhoff | 2008-04-23 09:46:15 +1000 (Wed, 23 Apr 2008) | 2 lines
  
  Fix or suppress MSVC level 4 warnings. Fixes #1703.
........
  r44848 | chris_kohlhoff | 2008-04-28 23:35:27 +1000 (Mon, 28 Apr 2008) | 2 lines
  
  Update asio version number.
........
  r44849 | chris_kohlhoff | 2008-04-28 23:36:18 +1000 (Mon, 28 Apr 2008) | 2 lines
  
  Add raw socket support.
........
  r44851 | chris_kohlhoff | 2008-04-28 23:56:07 +1000 (Mon, 28 Apr 2008) | 2 lines
  
  Add an experimental two-lock queue implementation for task_io_service.
........
  r44997 | chris_kohlhoff | 2008-05-02 08:00:26 +1000 (Fri, 02 May 2008) | 3 lines
  
  Add a fast path for some speculative read and write operations in the
  epoll_reactor.
........
  r44998 | chris_kohlhoff | 2008-05-02 08:27:21 +1000 (Fri, 02 May 2008) | 3 lines
  
  A memory barrier is needed on some platforms to ensure that all updates
  to the node occur before the tail pointer is updated.
........
  r45006 | chris_kohlhoff | 2008-05-02 17:59:01 +1000 (Fri, 02 May 2008) | 3 lines
  
  Fully qualify uses of asio's placeholders to resolve ambiguity with C++0x's
  placeholders namespace.
........
  r45010 | chris_kohlhoff | 2008-05-02 18:38:15 +1000 (Fri, 02 May 2008) | 3 lines
  
  Don't use the names readv and writev for functions defined inside asio as
  these names seem to be macros on Tru64.
........
  r45059 | chris_kohlhoff | 2008-05-03 21:36:16 +1000 (Sat, 03 May 2008) | 2 lines
  
  Add fast-pathing of speculative reads and writes to the kqueue_reactor.
........
  r45122 | chris_kohlhoff | 2008-05-05 16:30:13 +1000 (Mon, 05 May 2008) | 2 lines
  
  Implement custom memory allocation support for reactor-based asynchronous operations.
........
  r45179 | chris_kohlhoff | 2008-05-07 08:09:47 +1000 (Wed, 07 May 2008) | 2 lines
  
  Use an atomic counter for strand reference counting.
........
  r45292 | chris_kohlhoff | 2008-05-12 18:30:21 +1000 (Mon, 12 May 2008) | 2 lines
  
  Regenerate documentation to include raw socket classes.
........
  r45293 | chris_kohlhoff | 2008-05-12 18:35:56 +1000 (Mon, 12 May 2008) | 2 lines
  
  Don't generate enum value lists for empty enums.
........
  r45355 | chris_kohlhoff | 2008-05-14 22:17:26 +1000 (Wed, 14 May 2008) | 3 lines
  
  Add check for empty heap when determining the minimum wait duration for a
  timer queue.
........
  r45600 | chris_kohlhoff | 2008-05-21 19:25:12 +1000 (Wed, 21 May 2008) | 2 lines
  
  Implement custom allocation support for timer operations.
........
  r45633 | chris_kohlhoff | 2008-05-22 08:56:49 +1000 (Thu, 22 May 2008) | 2 lines
  
  Some Windows platforms don't define IPPROTO_ICMPV6.
........
  r45811 | chris_kohlhoff | 2008-05-27 17:54:12 +1000 (Tue, 27 May 2008) | 3 lines
  
  Fix a crash that can occur when destroying a handler object that owns its
  own memory (as is the case when destroying handlers in an orphaned strand).
........
  r45935 | chris_kohlhoff | 2008-05-30 18:39:19 +1000 (Fri, 30 May 2008) | 5 lines
  
  Fix a deadlock that can occur when destroying a thread object with global
  lifetime in a dynamically loaded DLL on Windows. Note that deadlock can
  still occur if the thread is launched by the constructor of an object with
  global lifetime.
........
  r46003 | chris_kohlhoff | 2008-06-01 11:31:25 +1000 (Sun, 01 Jun 2008) | 4 lines
  
  Add test for the crash that can occur when destroying a handler object that
  owns its own memory (as is the case when destroying handlers in an orphaned
  strand). 
........
  r46272 | chris_kohlhoff | 2008-06-09 22:54:55 +1000 (Mon, 09 Jun 2008) | 2 lines
  
  Add support for serial ports.
........
  r46319 | chris_kohlhoff | 2008-06-11 21:17:53 +1000 (Wed, 11 Jun 2008) | 2 lines
  
  Add random-access handles for use on Windows.
........
  r46325 | chris_kohlhoff | 2008-06-11 22:41:48 +1000 (Wed, 11 Jun 2008) | 2 lines
  
  Remove repeated typedef of reactor_type.
........
  r46327 | chris_kohlhoff | 2008-06-11 23:07:41 +1000 (Wed, 11 Jun 2008) | 2 lines
  
  Only perform check for a 0-byte receive meaning EOF on SOCK_STREAM sockets.
........
  r46415 | chris_kohlhoff | 2008-06-16 10:41:29 +1000 (Mon, 16 Jun 2008) | 2 lines
  
  Add an iterator for bytewise traversal of a buffer sequence.
........
  r46473 | chris_kohlhoff | 2008-06-18 21:22:21 +1000 (Wed, 18 Jun 2008) | 2 lines
  
  Fix write_at declaration. Add missing documentation for offset parameters.
........
  r46475 | chris_kohlhoff | 2008-06-18 23:03:46 +1000 (Wed, 18 Jun 2008) | 3 lines
  
  Add new overloads for read_until and async_read_until that invoke a
  user-defined function object to determine when a match has been found.
........
  r46476 | chris_kohlhoff | 2008-06-18 23:08:21 +1000 (Wed, 18 Jun 2008) | 2 lines
  
  Regenerate documentation.
........
  r46506 | chris_kohlhoff | 2008-06-19 22:41:32 +1000 (Thu, 19 Jun 2008) | 2 lines
  
  Fix for unicode builds.
........
  r46507 | chris_kohlhoff | 2008-06-19 22:50:02 +1000 (Thu, 19 Jun 2008) | 3 lines
  
  Fix serial port support on POSIX platforms that don't provide the BSD
  extensions cfmakeraw, cfsetspeed and CRTSCTS.
........


[SVN r46533]
2008-06-19 22:20:52 +00:00

231 lines
6.7 KiB
C++

//
// buffers_iterator.cpp
// ~~~~~~~~~~~~~~~~~~~~
//
// Copyright (c) 2003-2008 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// Disable autolinking for unit tests.
#if !defined(BOOST_ALL_NO_LIB)
#define BOOST_ALL_NO_LIB 1
#endif // !defined(BOOST_ALL_NO_LIB)
// Test that header file is self-contained.
#include <boost/asio/buffers_iterator.hpp>
#include <boost/asio.hpp>
#include "unit_test.hpp"
//------------------------------------------------------------------------------
// buffers_iterator_compile test
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// The following test checks that all operations on the buffers_iterator compile
// and link correctly. Runtime failures are ignored.
namespace buffers_iterator_compile {
using boost::array;
using std::vector;
using namespace boost::asio;
void test()
{
try
{
char data1[16], data2[16];
const char cdata1[16] = "", cdata2[16] = "";
mutable_buffers_1 mb1 = buffer(data1);
array<mutable_buffer, 2> mb2 = {{ buffer(data1), buffer(data2) }};
std::vector<mutable_buffer> mb3;
mb3.push_back(buffer(data1));
const_buffers_1 cb1 = buffer(cdata1);
array<const_buffer, 2> cb2 = {{ buffer(cdata1), buffer(cdata2) }};
vector<const_buffer> cb3;
cb3.push_back(buffer(cdata1));
// buffers_iterator constructors.
buffers_iterator<mutable_buffers_1, char> bi1;
buffers_iterator<mutable_buffers_1, const char> bi2;
buffers_iterator<array<mutable_buffer, 2>, char> bi3;
buffers_iterator<array<mutable_buffer, 2>, const char> bi4;
buffers_iterator<vector<mutable_buffer>, char> bi5;
buffers_iterator<vector<mutable_buffer>, const char> bi6;
buffers_iterator<const_buffers_1, char> bi7;
buffers_iterator<const_buffers_1, const char> bi8;
buffers_iterator<array<const_buffer, 2>, char> bi9;
buffers_iterator<array<const_buffer, 2>, const char> bi10;
buffers_iterator<vector<const_buffer>, char> bi11;
buffers_iterator<vector<const_buffer>, const char> bi12;
buffers_iterator<mutable_buffers_1, char> bi13(bi1);
buffers_iterator<mutable_buffers_1, const char> bi14(bi2);
buffers_iterator<array<mutable_buffer, 2>, char> bi15(bi3);
buffers_iterator<array<mutable_buffer, 2>, const char> bi16(bi4);
buffers_iterator<vector<mutable_buffer>, char> bi17(bi5);
buffers_iterator<vector<mutable_buffer>, const char> bi18(bi6);
buffers_iterator<const_buffers_1, char> bi19(bi7);
buffers_iterator<const_buffers_1, const char> bi20(bi8);
buffers_iterator<array<const_buffer, 2>, char> bi21(bi9);
buffers_iterator<array<const_buffer, 2>, const char> bi22(bi10);
buffers_iterator<vector<const_buffer>, char> bi23(bi11);
buffers_iterator<vector<const_buffer>, const char> bi24(bi12);
// buffers_iterator member functions.
bi1 = buffers_iterator<mutable_buffers_1, char>::begin(mb1);
bi2 = buffers_iterator<mutable_buffers_1, const char>::begin(mb1);
bi3 = buffers_iterator<array<mutable_buffer, 2>, char>::begin(mb2);
bi4 = buffers_iterator<array<mutable_buffer, 2>, const char>::begin(mb2);
bi5 = buffers_iterator<vector<mutable_buffer>, char>::begin(mb3);
bi6 = buffers_iterator<vector<mutable_buffer>, const char>::begin(mb3);
bi7 = buffers_iterator<const_buffers_1, char>::begin(cb1);
bi8 = buffers_iterator<const_buffers_1, const char>::begin(cb1);
bi9 = buffers_iterator<array<const_buffer, 2>, char>::begin(cb2);
bi10 = buffers_iterator<array<const_buffer, 2>, const char>::begin(cb2);
bi11 = buffers_iterator<vector<const_buffer>, char>::begin(cb3);
bi12 = buffers_iterator<vector<const_buffer>, const char>::begin(cb3);
bi1 = buffers_iterator<mutable_buffers_1, char>::end(mb1);
bi2 = buffers_iterator<mutable_buffers_1, const char>::end(mb1);
bi3 = buffers_iterator<array<mutable_buffer, 2>, char>::end(mb2);
bi4 = buffers_iterator<array<mutable_buffer, 2>, const char>::end(mb2);
bi5 = buffers_iterator<vector<mutable_buffer>, char>::end(mb3);
bi6 = buffers_iterator<vector<mutable_buffer>, const char>::end(mb3);
bi7 = buffers_iterator<const_buffers_1, char>::end(cb1);
bi8 = buffers_iterator<const_buffers_1, const char>::end(cb1);
bi9 = buffers_iterator<array<const_buffer, 2>, char>::end(cb2);
bi10 = buffers_iterator<array<const_buffer, 2>, const char>::end(cb2);
bi11 = buffers_iterator<vector<const_buffer>, char>::end(cb3);
bi12 = buffers_iterator<vector<const_buffer>, const char>::end(cb3);
// buffers_iterator related functions.
bi1 = buffers_begin(mb1);
bi3 = buffers_begin(mb2);
bi5 = buffers_begin(mb3);
bi7 = buffers_begin(cb1);
bi9 = buffers_begin(cb2);
bi11 = buffers_begin(cb3);
bi1 = buffers_end(mb1);
bi3 = buffers_end(mb2);
bi5 = buffers_end(mb3);
bi7 = buffers_end(cb1);
bi9 = buffers_end(cb2);
bi11 = buffers_end(cb3);
// RandomAccessIterator operations.
--bi1;
--bi2;
--bi3;
--bi4;
--bi5;
--bi6;
--bi7;
--bi8;
--bi9;
--bi10;
--bi11;
--bi12;
++bi1;
++bi2;
++bi3;
++bi4;
++bi5;
++bi6;
++bi7;
++bi8;
++bi9;
++bi10;
++bi11;
++bi12;
bi1--;
bi2--;
bi3--;
bi4--;
bi5--;
bi6--;
bi7--;
bi8--;
bi9--;
bi10--;
bi11--;
bi12--;
bi1++;
bi2++;
bi3++;
bi4++;
bi5++;
bi6++;
bi7++;
bi8++;
bi9++;
bi10++;
bi11++;
bi12++;
bi1 -= 1;
bi2 -= 1;
bi3 -= 1;
bi4 -= 1;
bi5 -= 1;
bi6 -= 1;
bi7 -= 1;
bi8 -= 1;
bi9 -= 1;
bi10 -= 1;
bi11 -= 1;
bi12 -= 1;
bi1 += 1;
bi2 += 1;
bi3 += 1;
bi4 += 1;
bi5 += 1;
bi6 += 1;
bi7 += 1;
bi8 += 1;
bi9 += 1;
bi10 += 1;
bi11 += 1;
bi12 += 1;
static_cast<std::ptrdiff_t>(bi13 - bi1);
static_cast<std::ptrdiff_t>(bi14 - bi2);
static_cast<std::ptrdiff_t>(bi15 - bi3);
static_cast<std::ptrdiff_t>(bi16 - bi4);
static_cast<std::ptrdiff_t>(bi17 - bi5);
static_cast<std::ptrdiff_t>(bi18 - bi6);
static_cast<std::ptrdiff_t>(bi19 - bi7);
static_cast<std::ptrdiff_t>(bi20 - bi8);
static_cast<std::ptrdiff_t>(bi21 - bi9);
static_cast<std::ptrdiff_t>(bi22 - bi10);
static_cast<std::ptrdiff_t>(bi23 - bi11);
static_cast<std::ptrdiff_t>(bi24 - bi12);
}
catch (std::exception&)
{
}
}
} // namespace buffers_iterator_compile
//------------------------------------------------------------------------------
test_suite* init_unit_test_suite(int, char*[])
{
test_suite* test = BOOST_TEST_SUITE("buffers_iterator");
test->add(BOOST_TEST_CASE(&buffers_iterator_compile::test));
return test;
}