blob: 2aab4b843f1a3d70dfdea8df9a5955def31582bf [file]
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef TOOLS_MEMORY_SIMULATOR_CONTIGUOUS_MEMORY_HOLDER_H_
#define TOOLS_MEMORY_SIMULATOR_CONTIGUOUS_MEMORY_HOLDER_H_
#include <cstddef>
#include <cstdint>
#include "tools/memory/simulator/memory_holder.h"
namespace memory_simulator {
// A class that holds memory pages at contiguous virtual addresses.
class ContiguousMemoryHolder : public MemoryHolder {
public:
// `max_pages` is the maximum number of pages that can be allocated through
// this object (exceeding it will result in a crash).
explicit ContiguousMemoryHolder(size_t max_pages);
~ContiguousMemoryHolder() override;
// MemoryHolder:
void Allocate() override;
void Read() override;
void Write() override;
private:
const size_t memory_length_;
const uintptr_t memory_;
uint64_t* alloc_position_ = nullptr;
uint64_t* read_position_ = nullptr;
uint64_t* write_position_ = nullptr;
};
} // namespace memory_simulator
#endif // TOOLS_MEMORY_SIMULATOR_CONTIGUOUS_MEMORY_HOLDER_H_