common/util/cpp/IOBuf.cpp (23 lines of code) (raw):
// Copyright (c) Facebook, Inc. and its affiliates.
#include <cpp/IOBuf.h>
std::unique_ptr<folly::IOBuf> common::hs::newIOBufWrapping(HS_IOBuf* hs_iobuf) {
auto ioBuf = folly::IOBuf::wrapBuffer(
hs_iobuf->str_arr[hs_iobuf->len - 1],
hs_iobuf->len_arr[hs_iobuf->len - 1]);
for (int i = hs_iobuf->len - 2; i >= 0; i--) {
auto last = std::move(ioBuf);
ioBuf =
folly::IOBuf::wrapBuffer(hs_iobuf->str_arr[i], hs_iobuf->len_arr[i]);
ioBuf->appendChain(std::move(last));
}
return ioBuf;
}
extern "C" {
void get_iobuf_data(IOBuf* iobuf, IOBufData* iobuf_data) {
iobuf_data->length_ = iobuf->length();
iobuf_data->data_buf_ = iobuf->data();
iobuf_data->next_ = iobuf->pop().release();
}
void destroy_iobuf(IOBuf* iobuf, uint8_t* buffer) {
delete iobuf;
}
}