Orion
high-rate readout
concepts.hpp
1 
5 #pragma once
6 
7 #include <cstdint>
8 
9 namespace itk {
10 
11 template<typename T, typename reg_t>
12 concept RegMem =
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>;
19  } and
20  requires(T self) {
21  { self.reset() } -> std::same_as<void>;
22  };
23 
24 
30 template<typename T>
31 class RegMem {
32 public:
33  using reg_t = T;
34 
36  virtual ~RegMem() = default;
37 
41  virtual reg_t get_mem(uint16_t addr) const = 0;
42 
46  virtual void set_mem(uint16_t addr, reg_t val) = 0;
47 
53  virtual reg_t get_mem_bits(uint16_t addr, uint8_t low, uint8_t num) const = 0;
54 
60  virtual void set_mem_bits(uint16_t addr, uint8_t low, uint8_t num, reg_t val) = 0;
61 
63  virtual void reset() = 0;
64 
65 }; // RegMem
66 
67 } // itk
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.