Files
pdf/engine/include/pdfengine/layout_arena.hpp
T

47 lines
1.1 KiB
C++
Raw Normal View History

2026-08-03 11:26:44 +05:30
#pragma once
#include <vector>
#include <cstddef>
#include <cstdint>
#include <memory>
#include <utility>
namespace pdfengine {
class LayoutArena {
public:
explicit LayoutArena(size_t blockSizeBytes = 65536);
~LayoutArena();
// Disable copy
LayoutArena(const LayoutArena&) = delete;
LayoutArena& operator=(const LayoutArena&) = delete;
// Enable move
LayoutArena(LayoutArena&&) noexcept;
LayoutArena& operator=(LayoutArena&&) noexcept;
template <typename T, typename... Args>
T* allocate(Args&&... args) {
void* mem = allocateBytes(sizeof(T), alignof(T));
return ::new (mem) T(std::forward<Args>(args)...);
}
void* allocateBytes(size_t size, size_t alignment = alignof(std::max_align_t));
void clear() noexcept;
[[nodiscard]] size_t totalAllocatedBytes() const noexcept;
private:
struct Chunk {
std::unique_ptr<uint8_t[]> data;
size_t size = 0;
size_t used = 0;
};
size_t m_defaultChunkSize = 65536;
std::vector<Chunk> m_chunks;
size_t m_totalAllocated = 0;
};
} // namespace pdfengine