1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
4 #include <seastar/core/temporary_buffer.hh>
5 #include "include/buffer.h"
6 #include "common/error_code.h"
10 template<bool is_const
>
11 class buffer_iterator_impl
{
13 using pointer
= std::conditional_t
<is_const
, const char*, char *>;
14 buffer_iterator_impl(pointer first
, const char* last
)
15 : pos(first
), end_ptr(last
)
17 pointer
get_pos_add(size_t n
) {
21 throw buffer::end_of_buffer
{};
32 } // namespace details
34 class seastar_buffer_iterator
: details::buffer_iterator_impl
<false> {
35 using parent
= details::buffer_iterator_impl
<false>;
36 using temporary_buffer
= seastar::temporary_buffer
<char>;
38 seastar_buffer_iterator(temporary_buffer
& b
)
39 : parent(b
.get_write(), b
.end()), buf(b
)
41 using parent::pointer
;
42 using parent::get_pos_add
;
44 ceph::buffer::ptr
get_ptr(size_t len
);
47 // keep the reference to buf around, so it can be "shared" by get_ptr()
48 temporary_buffer
& buf
;
51 class const_seastar_buffer_iterator
: details::buffer_iterator_impl
<true> {
52 using parent
= details::buffer_iterator_impl
<true>;
53 using temporary_buffer
= seastar::temporary_buffer
<char>;
55 const_seastar_buffer_iterator(temporary_buffer
& b
)
56 : parent(b
.get_write(), b
.end())
58 using parent::pointer
;
59 using parent::get_pos_add
;
61 ceph::buffer::ptr
get_ptr(size_t len
);