Update ASIO to 1.30.2
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
// detail/buffer_sequence_adapter.hpp
|
||||
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
//
|
||||
// Copyright (c) 2003-2018 Christopher M. Kohlhoff (chris at kohlhoff dot com)
|
||||
// Copyright (c) 2003-2024 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)
|
||||
@@ -19,6 +19,7 @@
|
||||
#include "asio/buffer.hpp"
|
||||
#include "asio/detail/array_fwd.hpp"
|
||||
#include "asio/detail/socket_types.hpp"
|
||||
#include "asio/registered_buffer.hpp"
|
||||
|
||||
#include "asio/detail/push_options.hpp"
|
||||
|
||||
@@ -104,6 +105,9 @@ class buffer_sequence_adapter
|
||||
: buffer_sequence_adapter_base
|
||||
{
|
||||
public:
|
||||
enum { is_single_buffer = false };
|
||||
enum { is_registered_buffer = false };
|
||||
|
||||
explicit buffer_sequence_adapter(const Buffers& buffer_sequence)
|
||||
: count_(0), total_buffer_size_(0)
|
||||
{
|
||||
@@ -127,6 +131,11 @@ public:
|
||||
return total_buffer_size_;
|
||||
}
|
||||
|
||||
registered_buffer_id registered_id() const
|
||||
{
|
||||
return registered_buffer_id();
|
||||
}
|
||||
|
||||
bool all_empty() const
|
||||
{
|
||||
return total_buffer_size_ == 0;
|
||||
@@ -153,6 +162,16 @@ public:
|
||||
asio::buffer_sequence_end(buffer_sequence));
|
||||
}
|
||||
|
||||
enum { linearisation_storage_size = 8192 };
|
||||
|
||||
static Buffer linearise(const Buffers& buffer_sequence,
|
||||
const asio::mutable_buffer& storage)
|
||||
{
|
||||
return buffer_sequence_adapter::linearise(
|
||||
asio::buffer_sequence_begin(buffer_sequence),
|
||||
asio::buffer_sequence_end(buffer_sequence), storage);
|
||||
}
|
||||
|
||||
private:
|
||||
template <typename Iterator>
|
||||
void init(Iterator begin, Iterator end)
|
||||
@@ -201,6 +220,30 @@ private:
|
||||
return Buffer();
|
||||
}
|
||||
|
||||
template <typename Iterator>
|
||||
static Buffer linearise(Iterator begin, Iterator end,
|
||||
const asio::mutable_buffer& storage)
|
||||
{
|
||||
asio::mutable_buffer unused_storage = storage;
|
||||
Iterator iter = begin;
|
||||
while (iter != end && unused_storage.size() != 0)
|
||||
{
|
||||
Buffer buffer(*iter);
|
||||
++iter;
|
||||
if (buffer.size() == 0)
|
||||
continue;
|
||||
if (unused_storage.size() == storage.size())
|
||||
{
|
||||
if (iter == end)
|
||||
return buffer;
|
||||
if (buffer.size() >= unused_storage.size())
|
||||
return buffer;
|
||||
}
|
||||
unused_storage += asio::buffer_copy(unused_storage, buffer);
|
||||
}
|
||||
return Buffer(storage.data(), storage.size() - unused_storage.size());
|
||||
}
|
||||
|
||||
native_buffer_type buffers_[max_buffers];
|
||||
std::size_t count_;
|
||||
std::size_t total_buffer_size_;
|
||||
@@ -211,6 +254,9 @@ class buffer_sequence_adapter<Buffer, asio::mutable_buffer>
|
||||
: buffer_sequence_adapter_base
|
||||
{
|
||||
public:
|
||||
enum { is_single_buffer = true };
|
||||
enum { is_registered_buffer = false };
|
||||
|
||||
explicit buffer_sequence_adapter(
|
||||
const asio::mutable_buffer& buffer_sequence)
|
||||
{
|
||||
@@ -233,6 +279,11 @@ public:
|
||||
return total_buffer_size_;
|
||||
}
|
||||
|
||||
registered_buffer_id registered_id() const
|
||||
{
|
||||
return registered_buffer_id();
|
||||
}
|
||||
|
||||
bool all_empty() const
|
||||
{
|
||||
return total_buffer_size_ == 0;
|
||||
@@ -253,6 +304,14 @@ public:
|
||||
return Buffer(buffer_sequence);
|
||||
}
|
||||
|
||||
enum { linearisation_storage_size = 1 };
|
||||
|
||||
static Buffer linearise(const asio::mutable_buffer& buffer_sequence,
|
||||
const Buffer&)
|
||||
{
|
||||
return Buffer(buffer_sequence);
|
||||
}
|
||||
|
||||
private:
|
||||
native_buffer_type buffer_;
|
||||
std::size_t total_buffer_size_;
|
||||
@@ -263,6 +322,9 @@ class buffer_sequence_adapter<Buffer, asio::const_buffer>
|
||||
: buffer_sequence_adapter_base
|
||||
{
|
||||
public:
|
||||
enum { is_single_buffer = true };
|
||||
enum { is_registered_buffer = false };
|
||||
|
||||
explicit buffer_sequence_adapter(
|
||||
const asio::const_buffer& buffer_sequence)
|
||||
{
|
||||
@@ -285,6 +347,11 @@ public:
|
||||
return total_buffer_size_;
|
||||
}
|
||||
|
||||
registered_buffer_id registered_id() const
|
||||
{
|
||||
return registered_buffer_id();
|
||||
}
|
||||
|
||||
bool all_empty() const
|
||||
{
|
||||
return total_buffer_size_ == 0;
|
||||
@@ -305,6 +372,14 @@ public:
|
||||
return Buffer(buffer_sequence);
|
||||
}
|
||||
|
||||
enum { linearisation_storage_size = 1 };
|
||||
|
||||
static Buffer linearise(const asio::const_buffer& buffer_sequence,
|
||||
const Buffer&)
|
||||
{
|
||||
return Buffer(buffer_sequence);
|
||||
}
|
||||
|
||||
private:
|
||||
native_buffer_type buffer_;
|
||||
std::size_t total_buffer_size_;
|
||||
@@ -317,6 +392,9 @@ class buffer_sequence_adapter<Buffer, asio::mutable_buffers_1>
|
||||
: buffer_sequence_adapter_base
|
||||
{
|
||||
public:
|
||||
enum { is_single_buffer = true };
|
||||
enum { is_registered_buffer = false };
|
||||
|
||||
explicit buffer_sequence_adapter(
|
||||
const asio::mutable_buffers_1& buffer_sequence)
|
||||
{
|
||||
@@ -339,6 +417,11 @@ public:
|
||||
return total_buffer_size_;
|
||||
}
|
||||
|
||||
registered_buffer_id registered_id() const
|
||||
{
|
||||
return registered_buffer_id();
|
||||
}
|
||||
|
||||
bool all_empty() const
|
||||
{
|
||||
return total_buffer_size_ == 0;
|
||||
@@ -359,6 +442,14 @@ public:
|
||||
return Buffer(buffer_sequence);
|
||||
}
|
||||
|
||||
enum { linearisation_storage_size = 1 };
|
||||
|
||||
static Buffer linearise(const asio::mutable_buffers_1& buffer_sequence,
|
||||
const Buffer&)
|
||||
{
|
||||
return Buffer(buffer_sequence);
|
||||
}
|
||||
|
||||
private:
|
||||
native_buffer_type buffer_;
|
||||
std::size_t total_buffer_size_;
|
||||
@@ -369,6 +460,9 @@ class buffer_sequence_adapter<Buffer, asio::const_buffers_1>
|
||||
: buffer_sequence_adapter_base
|
||||
{
|
||||
public:
|
||||
enum { is_single_buffer = true };
|
||||
enum { is_registered_buffer = false };
|
||||
|
||||
explicit buffer_sequence_adapter(
|
||||
const asio::const_buffers_1& buffer_sequence)
|
||||
{
|
||||
@@ -391,6 +485,11 @@ public:
|
||||
return total_buffer_size_;
|
||||
}
|
||||
|
||||
registered_buffer_id registered_id() const
|
||||
{
|
||||
return registered_buffer_id();
|
||||
}
|
||||
|
||||
bool all_empty() const
|
||||
{
|
||||
return total_buffer_size_ == 0;
|
||||
@@ -411,6 +510,14 @@ public:
|
||||
return Buffer(buffer_sequence);
|
||||
}
|
||||
|
||||
enum { linearisation_storage_size = 1 };
|
||||
|
||||
static Buffer linearise(const asio::const_buffers_1& buffer_sequence,
|
||||
const Buffer&)
|
||||
{
|
||||
return Buffer(buffer_sequence);
|
||||
}
|
||||
|
||||
private:
|
||||
native_buffer_type buffer_;
|
||||
std::size_t total_buffer_size_;
|
||||
@@ -418,11 +525,162 @@ private:
|
||||
|
||||
#endif // !defined(ASIO_NO_DEPRECATED)
|
||||
|
||||
template <typename Buffer, typename Elem>
|
||||
class buffer_sequence_adapter<Buffer, boost::array<Elem, 2> >
|
||||
template <typename Buffer>
|
||||
class buffer_sequence_adapter<Buffer, asio::mutable_registered_buffer>
|
||||
: buffer_sequence_adapter_base
|
||||
{
|
||||
public:
|
||||
enum { is_single_buffer = true };
|
||||
enum { is_registered_buffer = true };
|
||||
|
||||
explicit buffer_sequence_adapter(
|
||||
const asio::mutable_registered_buffer& buffer_sequence)
|
||||
{
|
||||
init_native_buffer(buffer_, buffer_sequence.buffer());
|
||||
total_buffer_size_ = buffer_sequence.size();
|
||||
registered_id_ = buffer_sequence.id();
|
||||
}
|
||||
|
||||
native_buffer_type* buffers()
|
||||
{
|
||||
return &buffer_;
|
||||
}
|
||||
|
||||
std::size_t count() const
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
std::size_t total_size() const
|
||||
{
|
||||
return total_buffer_size_;
|
||||
}
|
||||
|
||||
registered_buffer_id registered_id() const
|
||||
{
|
||||
return registered_id_;
|
||||
}
|
||||
|
||||
bool all_empty() const
|
||||
{
|
||||
return total_buffer_size_ == 0;
|
||||
}
|
||||
|
||||
static bool all_empty(
|
||||
const asio::mutable_registered_buffer& buffer_sequence)
|
||||
{
|
||||
return buffer_sequence.size() == 0;
|
||||
}
|
||||
|
||||
static void validate(
|
||||
const asio::mutable_registered_buffer& buffer_sequence)
|
||||
{
|
||||
buffer_sequence.data();
|
||||
}
|
||||
|
||||
static Buffer first(
|
||||
const asio::mutable_registered_buffer& buffer_sequence)
|
||||
{
|
||||
return Buffer(buffer_sequence.buffer());
|
||||
}
|
||||
|
||||
enum { linearisation_storage_size = 1 };
|
||||
|
||||
static Buffer linearise(
|
||||
const asio::mutable_registered_buffer& buffer_sequence,
|
||||
const Buffer&)
|
||||
{
|
||||
return Buffer(buffer_sequence.buffer());
|
||||
}
|
||||
|
||||
private:
|
||||
native_buffer_type buffer_;
|
||||
std::size_t total_buffer_size_;
|
||||
registered_buffer_id registered_id_;
|
||||
};
|
||||
|
||||
template <typename Buffer>
|
||||
class buffer_sequence_adapter<Buffer, asio::const_registered_buffer>
|
||||
: buffer_sequence_adapter_base
|
||||
{
|
||||
public:
|
||||
enum { is_single_buffer = true };
|
||||
enum { is_registered_buffer = true };
|
||||
|
||||
explicit buffer_sequence_adapter(
|
||||
const asio::const_registered_buffer& buffer_sequence)
|
||||
{
|
||||
init_native_buffer(buffer_, buffer_sequence.buffer());
|
||||
total_buffer_size_ = buffer_sequence.size();
|
||||
registered_id_ = buffer_sequence.id();
|
||||
}
|
||||
|
||||
native_buffer_type* buffers()
|
||||
{
|
||||
return &buffer_;
|
||||
}
|
||||
|
||||
std::size_t count() const
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
std::size_t total_size() const
|
||||
{
|
||||
return total_buffer_size_;
|
||||
}
|
||||
|
||||
registered_buffer_id registered_id() const
|
||||
{
|
||||
return registered_id_;
|
||||
}
|
||||
|
||||
bool all_empty() const
|
||||
{
|
||||
return total_buffer_size_ == 0;
|
||||
}
|
||||
|
||||
static bool all_empty(
|
||||
const asio::const_registered_buffer& buffer_sequence)
|
||||
{
|
||||
return buffer_sequence.size() == 0;
|
||||
}
|
||||
|
||||
static void validate(
|
||||
const asio::const_registered_buffer& buffer_sequence)
|
||||
{
|
||||
buffer_sequence.data();
|
||||
}
|
||||
|
||||
static Buffer first(
|
||||
const asio::const_registered_buffer& buffer_sequence)
|
||||
{
|
||||
return Buffer(buffer_sequence.buffer());
|
||||
}
|
||||
|
||||
enum { linearisation_storage_size = 1 };
|
||||
|
||||
static Buffer linearise(
|
||||
const asio::const_registered_buffer& buffer_sequence,
|
||||
const Buffer&)
|
||||
{
|
||||
return Buffer(buffer_sequence.buffer());
|
||||
}
|
||||
|
||||
private:
|
||||
native_buffer_type buffer_;
|
||||
std::size_t total_buffer_size_;
|
||||
registered_buffer_id registered_id_;
|
||||
};
|
||||
|
||||
template <typename Buffer, typename Elem>
|
||||
class buffer_sequence_adapter<Buffer, boost::array<Elem, 2>>
|
||||
: buffer_sequence_adapter_base
|
||||
{
|
||||
public:
|
||||
enum { is_single_buffer = false };
|
||||
enum { is_registered_buffer = false };
|
||||
|
||||
explicit buffer_sequence_adapter(
|
||||
const boost::array<Elem, 2>& buffer_sequence)
|
||||
{
|
||||
@@ -446,6 +704,11 @@ public:
|
||||
return total_buffer_size_;
|
||||
}
|
||||
|
||||
registered_buffer_id registered_id() const
|
||||
{
|
||||
return registered_buffer_id();
|
||||
}
|
||||
|
||||
bool all_empty() const
|
||||
{
|
||||
return total_buffer_size_ == 0;
|
||||
@@ -468,18 +731,32 @@ public:
|
||||
? buffer_sequence[0] : buffer_sequence[1]);
|
||||
}
|
||||
|
||||
enum { linearisation_storage_size = 8192 };
|
||||
|
||||
static Buffer linearise(const boost::array<Elem, 2>& buffer_sequence,
|
||||
const asio::mutable_buffer& storage)
|
||||
{
|
||||
if (buffer_sequence[0].size() == 0)
|
||||
return Buffer(buffer_sequence[1]);
|
||||
if (buffer_sequence[1].size() == 0)
|
||||
return Buffer(buffer_sequence[0]);
|
||||
return Buffer(storage.data(),
|
||||
asio::buffer_copy(storage, buffer_sequence));
|
||||
}
|
||||
|
||||
private:
|
||||
native_buffer_type buffers_[2];
|
||||
std::size_t total_buffer_size_;
|
||||
};
|
||||
|
||||
#if defined(ASIO_HAS_STD_ARRAY)
|
||||
|
||||
template <typename Buffer, typename Elem>
|
||||
class buffer_sequence_adapter<Buffer, std::array<Elem, 2> >
|
||||
class buffer_sequence_adapter<Buffer, std::array<Elem, 2>>
|
||||
: buffer_sequence_adapter_base
|
||||
{
|
||||
public:
|
||||
enum { is_single_buffer = false };
|
||||
enum { is_registered_buffer = false };
|
||||
|
||||
explicit buffer_sequence_adapter(
|
||||
const std::array<Elem, 2>& buffer_sequence)
|
||||
{
|
||||
@@ -503,6 +780,11 @@ public:
|
||||
return total_buffer_size_;
|
||||
}
|
||||
|
||||
registered_buffer_id registered_id() const
|
||||
{
|
||||
return registered_buffer_id();
|
||||
}
|
||||
|
||||
bool all_empty() const
|
||||
{
|
||||
return total_buffer_size_ == 0;
|
||||
@@ -525,13 +807,24 @@ public:
|
||||
? buffer_sequence[0] : buffer_sequence[1]);
|
||||
}
|
||||
|
||||
enum { linearisation_storage_size = 8192 };
|
||||
|
||||
static Buffer linearise(const std::array<Elem, 2>& buffer_sequence,
|
||||
const asio::mutable_buffer& storage)
|
||||
{
|
||||
if (buffer_sequence[0].size() == 0)
|
||||
return Buffer(buffer_sequence[1]);
|
||||
if (buffer_sequence[1].size() == 0)
|
||||
return Buffer(buffer_sequence[0]);
|
||||
return Buffer(storage.data(),
|
||||
asio::buffer_copy(storage, buffer_sequence));
|
||||
}
|
||||
|
||||
private:
|
||||
native_buffer_type buffers_[2];
|
||||
std::size_t total_buffer_size_;
|
||||
};
|
||||
|
||||
#endif // defined(ASIO_HAS_STD_ARRAY)
|
||||
|
||||
} // namespace detail
|
||||
} // namespace asio
|
||||
|
||||
|
||||
Reference in New Issue
Block a user