32 std::numeric_limits<ScratchPageId>::max();
35 const std::byte*
data =
nullptr;
99 std::size_t
page_size() const noexcept {
return page_size_; }
114 const auto status = valid_page(
id, destination.data, destination.size)
145 bool valid_page(
ScratchPageId id,
const void* bytes, std::size_t size)
const noexcept {
146 return id !=
scratch_no_page && page_size_ != 0 && bytes && size == page_size_;
152 {kind_, operation, id, static_cast<std::uint64_t>(bytes), status});
156 const std::size_t page_size_;
157 const ScratchIoObserver observer_;
174 return page_size() && storage_.data && storage_.size
181 std::uint64_t
page_count() const noexcept
override {
return extent_; }
187 const auto offset =
static_cast<std::size_t
>(id) *
page_size();
188 std::memmove(destination.data, storage_.data + offset,
page_size());
194 const auto offset =
static_cast<std::size_t
>(id) *
page_size();
196 const auto old_end =
static_cast<std::size_t
>(extent_) *
page_size();
197 std::memset(storage_.data + old_end, 0, offset - old_end);
200 if (
id >= extent_) extent_ =
id + 1;
210 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
bool has_io_observer() const noexcept
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