Skip to content

Commit b4f2126

Browse files
algos use dynamic_buffer_view
1 parent 4d2d54e commit b4f2126

File tree

13 files changed

+33
-80
lines changed

13 files changed

+33
-80
lines changed

include/boost/async/io/copy.hpp

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
#include <boost/async/io/stream.hpp>
1212
#include <boost/async/promise.hpp>
13-
#include <boost/async/io/buffers/any_dynamic_buffer.hpp>
13+
#include <boost/async/io/buffers/dynamic_buffer_view.hpp>
1414

1515
namespace boost::async::io
1616
{
@@ -19,16 +19,9 @@ BOOST_ASYNC_DECL promise<std::pair<transfer_result, transfer_result>>
1919
copy(stream & source, stream & sink);
2020

2121
BOOST_ASYNC_DECL promise<std::pair<transfer_result, transfer_result>>
22-
copy(stream & source, stream & sink, buffers::any_dynamic_buffer & buffer, std::size_t chunk_size = 4096);
22+
copy(stream & source, stream & sink, buffers::dynamic_buffer_view buffer, std::size_t chunk_size = 4096);
2323

2424

25-
template<buffers::dynamic_buffer DynamicBuffer>
26-
promise<transfer_result> read(stream & source, stream & sink, DynamicBuffer & buffer, std::size_t chunk_size = 4096)
27-
{
28-
auto any = buffers::make_any(buffer);
29-
buffers::any_dynamic_buffer & ab = any;
30-
co_return co_await copy(source, sink, ab, chunk_size);
31-
}
3225

3326
}
3427

include/boost/async/io/copy_n.hpp

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
#include <boost/async/io/stream.hpp>
1212
#include <boost/async/promise.hpp>
13-
#include <boost/async/io/buffers/any_dynamic_buffer.hpp>
13+
#include <boost/async/io/buffers/dynamic_buffer_view.hpp>
1414

1515
namespace boost::async::io
1616
{
@@ -19,19 +19,9 @@ BOOST_ASYNC_DECL promise<std::pair<transfer_result, transfer_result>>
1919
copy_n(stream & source, stream & sink, std::size_t n);
2020

2121
BOOST_ASYNC_DECL promise<std::pair<transfer_result, transfer_result>>
22-
copy_n(stream & source, stream & sink, buffers::any_dynamic_buffer & buffer,
22+
copy_n(stream & source, stream & sink, buffers::dynamic_buffer_view buffer,
2323
std::size_t n, std::size_t chunk_size = 4096);
2424

25-
26-
template<buffers::dynamic_buffer DynamicBuffer>
27-
promise<transfer_result> copy_n(stream & source, stream & sink, DynamicBuffer & buffer,
28-
std::size_t n, std::size_t chunk_size = 4096)
29-
{
30-
auto any = buffers::make_any(buffer);
31-
buffers::any_dynamic_buffer & ab = any;
32-
co_return co_await copy_n(source, sink, ab, n, chunk_size);
33-
}
34-
3525
}
3626

3727
#endif //BOOST_ASYNC_IO_COPY_N_HPP

include/boost/async/io/read.hpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010

1111
#include <boost/async/promise.hpp>
1212
#include <boost/async/io/stream.hpp>
13-
#include <boost/async/io/buffers/any_dynamic_buffer.hpp>
1413
#include <boost/async/io/buffers/mutable_buffer_span.hpp>
14+
#include <boost/async/io/buffers/range.hpp>
1515
#include <boost/container/pmr/vector.hpp>
1616

1717
namespace boost::async::io
@@ -20,8 +20,6 @@ namespace boost::async::io
2020
BOOST_ASYNC_DECL promise<transfer_result> read(stream & source, buffers::mutable_buffer buffer);
2121
BOOST_ASYNC_DECL promise<transfer_result> read(stream & source, buffers::mutable_buffer_span buffer);
2222
BOOST_ASYNC_DECL promise<transfer_result> read(stream & source, buffers::mutable_buffer_subspan buffer);
23-
BOOST_ASYNC_DECL promise<transfer_result> read(stream & source, buffers::any_dynamic_buffer & buffer,
24-
std::size_t chunk_size = 4096);
2523

2624
template<buffers::mutable_buffer_sequence MutableBufferSequence>
2725
requires (!std::convertible_to<buffers::mutable_buffer_span, MutableBufferSequence>)

include/boost/async/io/read_all.hpp

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,25 +10,16 @@
1010

1111
#include <boost/async/promise.hpp>
1212
#include <boost/async/io/stream.hpp>
13-
#include <boost/async/io/buffers/any_dynamic_buffer.hpp>
13+
#include <boost/async/io/buffers/dynamic_buffer_view.hpp>
1414
#include <boost/core/detail/string_view.hpp>
1515
#include <boost/container/pmr/vector.hpp>
1616

1717
namespace boost::async::io
1818
{
1919

20-
BOOST_ASYNC_DECL promise<transfer_result> read_all(stream & source, buffers::any_dynamic_buffer & buffer,
20+
BOOST_ASYNC_DECL promise<transfer_result> read_all(stream & source, buffers::dynamic_buffer_view buffer,
2121
std::size_t chunk_size = 4096);
2222

23-
template<buffers::dynamic_buffer DynamicBuffer>
24-
promise<transfer_result> read_all(stream & source, DynamicBuffer &&buffer, std::size_t chunk_size = 4096)
25-
{
26-
auto any = buffers::make_any(std::forward<DynamicBuffer>(buffer));
27-
buffers::any_dynamic_buffer & ab = any;
28-
co_return co_await read_all(source, ab, chunk_size);
29-
}
30-
31-
3223
}
3324

3425
#endif //BOOST_ASYNC_IO_READ_ALL_HPP

include/boost/async/io/read_until.hpp

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -10,37 +10,18 @@
1010

1111
#include <boost/async/promise.hpp>
1212
#include <boost/async/io/stream.hpp>
13-
#include <boost/async/io/buffers/any_dynamic_buffer.hpp>
13+
#include <boost/async/io/buffers/dynamic_buffer_view.hpp>
1414
#include <boost/core/detail/string_view.hpp>
1515
#include <boost/container/pmr/vector.hpp>
1616

1717
namespace boost::async::io
1818
{
1919

20-
BOOST_ASYNC_DECL promise<transfer_result> read_until(stream & source, buffers::any_dynamic_buffer & buffer,
20+
BOOST_ASYNC_DECL promise<transfer_result> read_until(stream & source, buffers::dynamic_buffer_view buffer,
2121
char delim, std::size_t chunk_size = 4096);
22-
BOOST_ASYNC_DECL promise<transfer_result> read_until(stream & source, buffers::any_dynamic_buffer & buffer,
22+
BOOST_ASYNC_DECL promise<transfer_result> read_until(stream & source, buffers::dynamic_buffer_view buffer,
2323
core::string_view delim, std::size_t chunk_size = 4096);
2424

25-
26-
template<buffers::dynamic_buffer DynamicBuffer>
27-
promise<transfer_result> read_until(stream & source, DynamicBuffer &&buffer,
28-
char delim, std::size_t chunk_size = 4096)
29-
{
30-
auto any = buffers::make_any(std::forward<DynamicBuffer>(buffer));
31-
buffers::any_dynamic_buffer & ab = any;
32-
co_return co_await read_until(source, ab, delim, chunk_size);
33-
}
34-
35-
template<buffers::dynamic_buffer DynamicBuffer>
36-
promise<transfer_result> read_until(stream & source, DynamicBuffer &&buffer,
37-
core::string_view delim, std::size_t chunk_size = 4096)
38-
{
39-
auto any = buffers::make_any(std::forward<DynamicBuffer>(buffer));
40-
buffers::any_dynamic_buffer & ab = any;
41-
co_return co_await read_until(source, ab, delim, chunk_size);
42-
}
43-
4425
}
4526

4627
#endif //BOOST_ASYNC_IO_READ_UNTIL_HPP

include/boost/async/io/write.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010

1111
#include <boost/async/promise.hpp>
1212
#include <boost/async/io/stream.hpp>
13-
#include <boost/async/io/buffers/any_dynamic_buffer.hpp>
1413
#include <boost/async/io/buffers/const_buffer_span.hpp>
14+
#include <boost/async/io/buffers/range.hpp>
1515
#include <boost/container/pmr/vector.hpp>
1616

1717
namespace boost::async::io

src/io/copy.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ copy(stream & source, stream & sink)
2424
w = {};
2525

2626
buf.commit(r.transferred);
27+
printf("Copy 1 %ld/%ld ==> \n", r.transferred, w.transferred, 1024 * 1024);
2728

2829
while (!r.has_error() && !w.has_error())
2930
{
@@ -40,18 +41,17 @@ copy(stream & source, stream & sink)
4041
// remaining readable stuff
4142
while (r.has_error() && !w.has_error() && buffers::buffer_size(buf.data()) > 0u)
4243
{
43-
assert(false);
4444
auto w2 = co_await sink.write_some(buffers::const_buffer_span(buf.data()));
4545
buf.consume(w2.transferred);
4646
w.transferred = w2.transferred;
4747
w.error = w2.error;
4848
}
49-
49+
printf("Copy %ld/%ld ==> \n", r.transferred, w.transferred, 1024 * 1024);
5050
co_return {r, w};
5151
}
5252

5353
promise<std::pair<transfer_result, transfer_result>>
54-
copy(stream & source, stream & sink, buffers::any_dynamic_buffer & buf, std::size_t chunk_size)
54+
copy(stream & source, stream & sink, buffers::dynamic_buffer_view buf, std::size_t chunk_size)
5555
{
5656
transfer_result r = co_await source.read_some(buffers::mutable_buffer_span(buf.prepare(chunk_size))),
5757
w = {};
@@ -73,12 +73,12 @@ copy(stream & source, stream & sink, buffers::any_dynamic_buffer & buf, std::siz
7373
// remaining readable stuff
7474
while (r.has_error() && !w.has_error() && buffers::buffer_size(buf.data()) > 0u)
7575
{
76-
assert(false);
7776
auto w2 = co_await sink.write_some(buffers::const_buffer_span(buf.data()));
7877
buf.consume(w2.transferred);
7978
w.transferred = w2.transferred;
8079
w.error = w2.error;
8180
}
81+
printf("Copy %ld/%ld\n", r.transferred, w.transferred);
8282
co_return {r, w};
8383
}
8484

src/io/copy_n.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ copy_n(stream & source, stream & sink, std::size_t n)
5252
}
5353

5454
promise<std::pair<transfer_result, transfer_result>>
55-
copy_n(stream & source, stream & sink, buffers::any_dynamic_buffer & buf,
55+
copy_n(stream & source, stream & sink, buffers::dynamic_buffer_view buf,
5656
std::size_t n, std::size_t chunk_size)
5757
{
5858
transfer_result r = co_await source.read_some(buffers::mutable_buffer_span(buf.prepare(chunk_size))),

src/io/read_all.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,18 @@
1717
namespace boost::async::io
1818
{
1919

20-
promise<transfer_result> read_all(stream & source, buffers::any_dynamic_buffer & buffer, std::size_t chunk_size)
20+
promise<transfer_result> read_all(stream & source, buffers::dynamic_buffer_view buffer, std::size_t chunk_size)
2121
{
2222
transfer_result tr;
2323

2424
do
2525
{
26-
auto rd = co_await source.read_some(buffer.prepare(chunk_size));
26+
auto rd = co_await source.read_some(buffer.prepare((std::min)(chunk_size, buffer.max_size() - buffer.size())));
2727
tr.transferred += rd.transferred;
2828
tr.error = rd.error;
2929
buffer.commit(rd.transferred);
3030
}
31-
while (buffer.size() >= 0 && !tr.has_error());
31+
while (buffer.max_size() > buffer.size() && !tr.has_error());
3232
co_return tr;
3333
}
3434

src/io/read_until.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,15 @@
1717
namespace boost::async::io
1818
{
1919

20-
promise<transfer_result> read_until(stream & source, buffers::any_dynamic_buffer & buffer,
20+
promise<transfer_result> read_until(stream & source, buffers::dynamic_buffer_view buffer,
2121
char delim, std::size_t chunk_size)
2222
{
2323
transfer_result tr{};
2424

2525
bool matched = false;
2626
do
2727
{
28-
auto buf = buffer.prepare(chunk_size);
28+
auto buf = buffer.prepare((std::min)(chunk_size, buffer.max_size() - buffer.size()));
2929
auto rd = co_await source.read_some(buf);
3030

3131
auto begin = asio::buffers_begin(buf);
@@ -39,7 +39,7 @@ promise<transfer_result> read_until(stream & source, buffers::any_dynamic_buffer
3939
co_return tr;
4040
}
4141

42-
promise<transfer_result> read_until(stream & source, buffers::any_dynamic_buffer & buffer,
42+
promise<transfer_result> read_until(stream & source, buffers::dynamic_buffer_view buffer,
4343
core::string_view delim, std::size_t chunk_size)
4444
{
4545
transfer_result tr;
@@ -51,7 +51,7 @@ promise<transfer_result> read_until(stream & source, buffers::any_dynamic_buffer
5151
bool matched = false;
5252
do
5353
{
54-
auto buf = buffer.prepare(chunk_size);
54+
auto buf = buffer.prepare((std::min)(chunk_size, buffer.max_size() - buffer.size()));
5555
auto rd = co_await source.read_some(buf);
5656
tr.transferred += rd.transferred;
5757
tr.error = rd.error;
@@ -63,7 +63,7 @@ promise<transfer_result> read_until(stream & source, buffers::any_dynamic_buffer
6363
auto itr = std::search(begin, end, delim.begin(), delim.end());
6464
matched = (itr != end);
6565
}
66-
while (buffer.size() > 0 && !tr.has_error() && !matched);
66+
while (buffer.max_size() >= buffer.size() && !tr.has_error() && !matched);
6767
co_return tr;
6868
}
6969

0 commit comments

Comments
 (0)