CLK/Storage/MassStorage/MassStorageDevice.hpp

57 lines
1.2 KiB
C++

//
// MassStorageDevice.hpp
// Clock Signal
//
// Created by Thomas Harte on 21/08/2019.
// Copyright © 2019 Thomas Harte. All rights reserved.
//
#pragma once
#include <cstddef>
#include <cstdint>
#include <vector>
namespace Storage::MassStorage {
/*!
A mass storage device is usually:
* large;
* fixed; and
* part of a class with a very wide array of potential speeds and timings.
Within this emulator, mass storage devices don't attempt to emulate
any specific medium, they just offer block-based access to a
linearly-addressed store.
*/
class MassStorageDevice {
public:
virtual ~MassStorageDevice() = default;
/*!
@returns The size of each individual block.
*/
virtual size_t get_block_size() = 0;
/*!
Block addresses run from 0 to n. The total number of blocks, n,
therefore provides the range of valid addresses.
@returns The total number of blocks on the device.
*/
virtual size_t get_number_of_blocks() = 0;
/*!
@returns The current contents of the block at @c address.
*/
virtual std::vector<uint8_t> get_block(size_t address) = 0;
/*!
Sets new contents for the block at @c address.
*/
virtual void set_block([[maybe_unused]] size_t address, const std::vector<uint8_t> &) {}
};
}