| 272 | } |
| 273 | |
| 274 | RowVectorPtr IOBufToRowVector( |
| 275 | const folly::IOBuf& ioBuf, |
| 276 | const RowTypePtr& outputType, |
| 277 | memory::MemoryPool& pool, |
| 278 | VectorSerde* serde, |
| 279 | const VectorSerde::Options* options) { |
| 280 | std::vector<ByteRange> ranges; |
| 281 | ranges.reserve(4); |
| 282 | |
| 283 | for (const auto& range : ioBuf) { |
| 284 | ranges.emplace_back(ByteRange{ |
| 285 | const_cast<uint8_t*>(range.data()), (int32_t)range.size(), 0}); |
| 286 | } |
| 287 | |
| 288 | auto byteStream = std::make_unique<ByteInputStream>(std::move(ranges)); |
| 289 | RowVectorPtr outputVector; |
| 290 | |
| 291 | // If not supplied, use the default one. |
| 292 | if (serde == nullptr) { |
| 293 | serde = getVectorSerde(); |
| 294 | } |
| 295 | serde->deserialize( |
| 296 | byteStream.get(), &pool, outputType, &outputVector, options); |
| 297 | return outputVector; |
| 298 | } |
| 299 | |
| 300 | } // namespace bytedance::bolt |