//===----------------------------------------------------------------------===// // DuckDB // // duckdb/common/serializer/buffered_serializer.hpp // // //===----------------------------------------------------------------------===// #pragma once #include "duckdb/common/serializer.hpp" #include "duckdb/common/unique_ptr.hpp" namespace duckdb { #define SERIALIZER_DEFAULT_SIZE 1024 struct BinaryData { unsafe_unique_array data; idx_t size; }; class BufferedSerializer : public Serializer { public: //! Serializes to a buffer allocated by the serializer, will expand when //! writing past the initial threshold DUCKDB_API explicit BufferedSerializer(idx_t maximum_size = SERIALIZER_DEFAULT_SIZE); //! Serializes to a provided (owned) data pointer BufferedSerializer(unsafe_unique_array data, idx_t size); BufferedSerializer(data_ptr_t data, idx_t size); idx_t maximum_size; data_ptr_t data; BinaryData blob; public: void WriteData(const_data_ptr_t buffer, uint64_t write_size) override; //! Retrieves the data after the writing has been completed BinaryData GetData() { return std::move(blob); } void Reset() { blob.size = 0; } }; } // namespace duckdb