New buffers() replaces to_string() (API Change):

A new function, buffers(), returns an implementation defined object
which wraps a ConstBufferSequence and supports formatting to a
std::ostream.

The function to_string is removed, as the new implementation allows
conversion to string using boost::lexical_cast on the return value
of the call to buffers(). Streaming to an output stream is more
efficient: no dynamic allocations are performed.

Example:

    streambuf sb;
    std::cout << buffers(sb.data()) << std::endl;
This commit is contained in:
Vinnie Falco
2017-05-09 07:23:04 -07:00
parent a7ef4f53dc
commit bef9ae11ea
23 changed files with 156 additions and 156 deletions
-1
View File
@@ -30,7 +30,6 @@ add_executable (core-tests
static_string.cpp
stream_concepts.cpp
streambuf.cpp
to_string.cpp
base64.cpp
empty_base_optimization.cpp
get_lowest_layer.cpp
+4 -8
View File
@@ -8,10 +8,12 @@
// Test that header file is self-contained.
#include <beast/core/buffers_adapter.hpp>
#include <beast/core/ostream.hpp>
#include <beast/core/streambuf.hpp>
#include <beast/unit_test/suite.hpp>
#include <boost/asio/buffer.hpp>
#include <boost/asio/streambuf.hpp>
#include <boost/lexical_cast.hpp>
#include <iterator>
namespace beast {
@@ -24,14 +26,8 @@ public:
std::string
to_string(ConstBufferSequence const& bs)
{
using boost::asio::buffer_cast;
using boost::asio::buffer_size;
std::string s;
s.reserve(buffer_size(bs));
for(auto const& b : bs)
s.append(buffer_cast<char const*>(b),
buffer_size(b));
return s;
return boost::lexical_cast<
std::string>(buffers(bs));
}
void testBuffersAdapter()
+10 -1
View File
@@ -9,7 +9,7 @@
#include <beast/core/consuming_buffers.hpp>
#include "buffer_test.hpp"
#include <beast/core/to_string.hpp>
#include <beast/core/ostream.hpp>
#include <beast/unit_test/suite.hpp>
#include <boost/asio/buffer.hpp>
#include <string>
@@ -19,6 +19,15 @@ namespace beast {
class consuming_buffers_test : public beast::unit_test::suite
{
public:
template<class ConstBufferSequence>
static
std::string
to_string(ConstBufferSequence const& bs)
{
return boost::lexical_cast<
std::string>(buffers(bs));
}
template<class BufferSequence>
static
consuming_buffers<BufferSequence>
+11 -1
View File
@@ -9,9 +9,10 @@
#include <beast/core/flat_streambuf.hpp>
#include "buffer_test.hpp"
#include <beast/core/to_string.hpp>
#include <beast/core/ostream.hpp>
#include <beast/test/test_allocator.hpp>
#include <beast/unit_test/suite.hpp>
#include <boost/lexical_cast.hpp>
#include <algorithm>
namespace beast {
@@ -22,6 +23,15 @@ static_assert(is_DynamicBuffer<flat_streambuf>::value,
class flat_streambuf_test : public beast::unit_test::suite
{
public:
template<class ConstBufferSequence>
static
std::string
to_string(ConstBufferSequence const& bs)
{
return boost::lexical_cast<
std::string>(buffers(bs));
}
template<class Alloc1, class Alloc2>
static
bool
+3 -3
View File
@@ -10,10 +10,9 @@
#include <beast/core/streambuf.hpp>
#include <beast/unit_test/suite.hpp>
#include <boost/lexical_cast.hpp>
#include <ostream>
#include <beast/core/to_string.hpp>
namespace beast {
class ostream_test : public beast::unit_test::suite
@@ -23,7 +22,8 @@ public:
{
streambuf sb;
ostream(sb) << "Hello, world!\n";
BEAST_EXPECT(to_string(sb.data()) == "Hello, world!\n");
BEAST_EXPECT(boost::lexical_cast<std::string>(
buffers(sb.data())) == "Hello, world!\n");
}
};
+10 -1
View File
@@ -10,7 +10,7 @@
#include "buffer_test.hpp"
#include <beast/core/buffer_concepts.hpp>
#include <beast/core/to_string.hpp>
#include <beast/core/ostream.hpp>
#include <beast/test/test_allocator.hpp>
#include <beast/unit_test/suite.hpp>
#include <boost/asio/buffer.hpp>
@@ -26,6 +26,15 @@ static_assert(is_DynamicBuffer<streambuf>::value, "");
class basic_streambuf_test : public beast::unit_test::suite
{
public:
template<class ConstBufferSequence>
static
std::string
to_string(ConstBufferSequence const& bs)
{
return boost::lexical_cast<
std::string>(buffers(bs));
}
template<class Alloc1, class Alloc2>
static
bool
-28
View File
@@ -1,28 +0,0 @@
//
// Copyright (c) 2013-2017 Vinnie Falco (vinnie dot falco at gmail 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)
//
// Test that header file is self-contained.
#include <beast/core/to_string.hpp>
#include <beast/unit_test/suite.hpp>
#include <boost/asio/buffer.hpp>
namespace beast {
class to_string_test : public beast::unit_test::suite
{
public:
void run()
{
BEAST_EXPECT(to_string(boost::asio::const_buffers_1("x", 1)) == "x");
}
};
BEAST_DEFINE_TESTSUITE(to_string,core,beast);
} // beast