44 template <
typename Iterator>
51 :
data_(std::exchange(move.data_,
nullptr)),
52 capacity_(std::exchange(move.capacity_, 0)),
53 size_(std::exchange(move.size_, 0)),
54 position_(std::exchange(move.position_, 0)) {}
59 data_ = std::exchange(move.data_,
nullptr);
60 capacity_ = std::exchange(move.capacity_, 0);
61 size_ = std::exchange(move.size_, 0);
77 template <
typename InputIt>
123 static_assert(std::is_standard_layout<decltype(data())>());
208 if (block.size() == 0) {
213 chain_.emplace_back(std::move(block));
225 template <
typename Fn>
232 const auto& block =
chain_[i];
233 const char* begin = block.data();
234 size_t length = block.size();
241 callback(begin, length);
247 template <
typename CollectionType = block_type>
249 CollectionType result;
254 result.resize(
size());
258 static_assert(std::is_standard_layout<decltype(result)>());
259 memcpy(&result[offset],
data, len);
268 template <
typename FunctionType>
281 std::vector<adb_iovec>
iovecs()
const;
348 ptr_->weak_ptrs_.erase(
349 std::remove(
ptr_->weak_ptrs_.begin(),
ptr_->weak_ptrs_.end(),
this));
354 ptr_->weak_ptrs_.push_back(
this);
369 weak->ptr_ =
nullptr;
#define min(a, b)
Definition: ext4_utils.h:44
void fdevent_run_on_looper(std::function< void()> fn)
Definition: fdevent.cpp:260
void fdevent_check_looper()
Definition: fdevent.cpp:268
char data[Size]
Definition: incremental_server.cpp:1
#define CHECK_EQ(x, y)
Definition: logging.h:280
#define CHECK(x)
Definition: logging.h:251
#define CHECK_GE(x, y)
Definition: logging.h:284
#define CHECK_NE(x, y)
Definition: logging.h:281
std::set< Range >::iterator Iterator
Definition: disjoint_range_set.cc:64
size_t capacity() const
Definition: types.h:106
const char * begin() const
Definition: types.h:114
char * end()
Definition: types.h:116
size_t remaining() const
Definition: types.h:93
bool is_full() const
Definition: types.h:91
const char & operator[](size_t idx) const
Definition: types.h:120
size_t fillFrom(Block &from)
Definition: types.h:95
char * iterator
Definition: types.h:36
char & operator[](size_t idx)
Definition: types.h:119
void rewind()
Definition: types.h:103
size_t size_
Definition: types.h:144
Block & operator=(const Block ©)=delete
void assign(InputIt begin, InputIt end)
Definition: types.h:78
size_t position() const
Definition: types.h:104
Block(const Block ©)=delete
void resize(size_t new_size)
Definition: types.h:68
size_t size() const
Definition: types.h:107
Block(size_t size)
Definition: types.h:40
size_t capacity_
Definition: types.h:143
Block & operator=(Block &&move) noexcept
Definition: types.h:57
void allocate(size_t size)
Definition: types.h:128
char * data()
Definition: types.h:110
void clear()
Definition: types.h:84
Block(Block &&move) noexcept
Definition: types.h:50
Block(Iterator begin, Iterator end)
Definition: types.h:45
size_t position_
Definition: types.h:145
char * begin()
Definition: types.h:113
const char * end() const
Definition: types.h:117
const char * data() const
Definition: types.h:111
bool empty() const
Definition: types.h:108
bool operator==(const Block &rhs) const
Definition: types.h:122
std::unique_ptr< char[]> data_
Definition: types.h:142
Block(const std::string &s)
Definition: types.h:42
void append(block_type &&block)
Definition: types.h:207
std::vector< adb_iovec > iovecs() const
Definition: types.cpp:193
IOVector(block_type &&block)
Definition: types.h:170
size_type front_size() const
Definition: types.h:186
void trim_chain_front()
Definition: types.cpp:131
size_t chain_length_
Definition: types.h:285
IOVector & operator=(const IOVector ©)=delete
void pop_front_block()
Definition: types.cpp:138
void trim_front()
Definition: types.cpp:114
void drop_front(size_type len)
Definition: types.cpp:41
IOVector(const IOVector ©)=delete
size_t start_index_
Definition: types.h:288
size_type size() const
Definition: types.h:194
size_t begin_offset_
Definition: types.h:287
IOVector(IOVector &&move) noexcept
Definition: types.h:173
auto coalesced(FunctionType &&f) const
Definition: types.h:269
IOVector take_front(size_type len)
Definition: types.cpp:65
std::vector< block_type > chain_
Definition: types.h:289
bool empty() const
Definition: types.h:195
Block block_type
Definition: types.h:165
char value_type
Definition: types.h:164
const value_type * front_data() const
Definition: types.h:178
size_t size_type
Definition: types.h:166
block_type clear()
Definition: types.cpp:29
CollectionType coalesce() const &
Definition: types.h:248
void iterate_blocks(Fn &&callback) const
Definition: types.h:226
uint32_t magic
Definition: types.h:154
uint32_t data_check
Definition: types.h:153
uint32_t arg1
Definition: types.h:151
uint32_t data_length
Definition: types.h:152
uint32_t arg0
Definition: types.h:150
uint32_t command
Definition: types.h:149
amessage msg
Definition: types.h:159
payload_type payload
Definition: types.h:160
std::vector< weak_ptr< T > * > weak_ptrs_
Definition: types.h:383
void schedule_deletion()
Definition: types.h:377
~enable_weak_from_this()
Definition: types.h:365
friend struct weak_ptr< T >
Definition: types.h:382
weak_ptr< T > weak()
Definition: types.h:375
weak_ptr & operator=(weak_ptr &&move)
Definition: types.h:325
weak_ptr & operator=(const weak_ptr ©)
Definition: types.h:316
T * ptr_
Definition: types.h:360
~weak_ptr()
Definition: types.h:314
void reset(T *ptr=nullptr)
Definition: types.h:340
weak_ptr(weak_ptr &&move)
Definition: types.h:309
weak_ptr(T *ptr)
Definition: types.h:306
T * get() const
Definition: types.h:335
weak_ptr(const weak_ptr ©)
Definition: types.h:307