32 std::numeric_limits<ScratchPageId>::max();
35 const std::byte*
data =
nullptr;
97 std::size_t
page_size() const noexcept {
return page_size_; }
110 const auto status = valid_page(
id, destination.data, destination.size)
117 const auto status = valid_page(
id,
source.data,
source.size)
141 bool valid_page(
ScratchPageId id,
const void* bytes, std::size_t size)
const noexcept {
142 return id !=
scratch_no_page && page_size_ != 0 && bytes && size == page_size_;
148 {kind_, operation, id, static_cast<std::uint64_t>(bytes), status});
152 const std::size_t page_size_;
153 const ScratchIoObserver observer_;
170 return page_size() && storage_.data && storage_.size
177 std::uint64_t
page_count() const noexcept
override {
return extent_; }
183 const auto offset =
static_cast<std::size_t
>(id) *
page_size();
184 std::memmove(destination.data, storage_.data + offset,
page_size());
190 const auto offset =
static_cast<std::size_t
>(id) *
page_size();
192 const auto old_end =
static_cast<std::size_t
>(extent_) *
page_size();
193 std::memset(storage_.data + old_end, 0, offset - old_end);
196 if (
id >= extent_) extent_ =
id + 1;
206 std::uint64_t extent_ = 0;
ScratchStatus do_sync(ScratchDurability durability) noexcept override
ScratchStatus do_write_page(ScratchPageId id, ScratchBytes source) noexcept override
ScratchStatus status() const noexcept
std::uint64_t capacity_pages() const noexcept
std::uint64_t page_count() const noexcept override
ScratchStatus do_read_page(ScratchPageId id, ScratchBuffer destination) const noexcept override
FixedMemoryScratchBacking(ScratchBuffer storage, std::size_t page_size, ScratchIoObserver observer={}) noexcept
virtual std::uint64_t page_count() const noexcept=0
ScratchBackingKind kind() const noexcept
std::size_t page_size() const noexcept
virtual ScratchStatus do_read_page(ScratchPageId, ScratchBuffer) const noexcept=0
ScratchBacking(const ScratchBacking &)=delete
virtual const ReportScratchIoError * carried_failure() const noexcept
virtual ScratchStatus do_write_page(ScratchPageId, ScratchBytes) noexcept=0
ScratchStatus read_page(ScratchPageId id, ScratchBuffer destination) const noexcept
virtual ScratchStatus do_sync(ScratchDurability) noexcept=0
ScratchBacking(ScratchBackingKind kind, std::size_t page_size, ScratchIoObserver observer={}) noexcept
virtual std::optional< std::uint64_t > arena_capacity_bytes() const noexcept
virtual ~ScratchBacking() noexcept=default
ScratchStatus sync(ScratchDurability durability) noexcept
ScratchStatus write_page(ScratchPageId id, ScratchBytes source) noexcept
constexpr ScratchPageId scratch_no_page
std::uint64_t ScratchPageId
ScratchIoOperation operation
void(* charge)(void *, const ScratchIoCharge &) noexcept