code/include/swoc/ArenaWriter.h (21 lines of code) (raw):

// SPDX-License-Identifier: Apache-2.0 // Copyright Verizon Media 2020 /** @file * @c BufferWriter for a @c MemArena. */ #pragma once #include "swoc/swoc_version.h" #include "swoc/MemSpan.h" #include "swoc/bwf_base.h" #include "swoc/MemArena.h" namespace swoc { inline namespace SWOC_VERSION_NS { /** Buffer writer for a @c MemArena. * * This provides formatted output to the remnant of a @c MemArena. The output resides in uncommitted * arena memory and must be committed externally. This will resize the remnant as needed to contain * the output without overflow. Because it uses the remnant, if there is an error or resizing, * no arena memory will be lost. */ class ArenaWriter : public FixedBufferWriter { using self_type = ArenaWriter; ///< Self reference type. using super_type = FixedBufferWriter; ///< Parent type. public: /** Constructor. * * @param arena Arena to use for storage. */ ArenaWriter(MemArena &arena); /** Write data to the buffer. * * @param data Data to write. * @param n Amount of data in bytes. * @return @a this */ ArenaWriter &write(void const *data, size_t n) override; /// Write a single character @a c to the buffer. ArenaWriter &write(char c) override; using super_type::write; // import super class write. /** Mark bytes as in use. * * @param n Number of bytes to include in the used buffer. * @return @c true if successful, @c false if additional buffer space was required. */ bool commit(size_t n) override; protected: MemArena &_arena; ///< Arena for the buffer. /** Reallocate the buffer to increase the capacity. * * @param n Total size required. */ void realloc(size_t n); }; inline swoc::ArenaWriter::ArenaWriter(swoc::MemArena &arena) : super_type(arena.remnant()), _arena(arena) {} }} // namespace swoc::SWOC_VERSION_NS