11 template<
typename T,
typename reg_t>
13 std::destructible<T> and
14 requires(T
self, uint16_t addr, reg_t val, uint8_t low, uint8_t num) {
15 {
self.get_mem(addr)
const } -> std::same_as<reg_t>;
16 {
self.set_mem(addr, val) } -> std::same_as<void>;
17 {
self.get_mem_bits(addr, low, num)
const } -> std::same_as<reg_t>;
18 {
self.set_mem_bits(addr, low, num, val) } -> std::same_as<void>;
21 {
self.reset() } -> std::same_as<void>;
41 virtual reg_t
get_mem(uint16_t addr)
const = 0;
46 virtual void set_mem(uint16_t addr, reg_t val) = 0;
53 virtual reg_t
get_mem_bits(uint16_t addr, uint8_t low, uint8_t num)
const = 0;
60 virtual void set_mem_bits(uint16_t addr, uint8_t low, uint8_t num, reg_t val) = 0;
Interface definition for register memory.
Definition: concepts.hpp:31
virtual void set_mem_bits(uint16_t addr, uint8_t low, uint8_t num, reg_t val)=0
Set bits to memory.
virtual void set_mem(uint16_t addr, reg_t val)=0
Set a value into memory.
virtual reg_t get_mem(uint16_t addr) const =0
Get a value from memory.
virtual reg_t get_mem_bits(uint16_t addr, uint8_t low, uint8_t num) const =0
Get bits from memory.
virtual ~RegMem()=default
Default destructor.
virtual void reset()=0
Reset memory.