Memory(uint32_t space_id, RangeCheckInterface &range_check, ExecutionIdGetterInterface &execution_id_manager, EventEmitterInterface< MemoryEvent > &event_emitter)
ExecutionIdGetterInterface & execution_id_manager
unordered_flat_map< size_t, MemoryValue > memory
uint32_t get_space_id() const override
void validate_tag(const MemoryValue &value) const
EventEmitterInterface< MemoryEvent > & events
const MemoryValue & get(MemoryAddress index) const override
RangeCheckInterface & range_check
void set(MemoryAddress index, MemoryValue value) override
virtual void set(MemoryAddress index, MemoryValue value)=0
virtual bool is_valid_address(const MemoryValue &address)
virtual const MemoryValue & get(MemoryAddress index) const =0
virtual ~MemoryInterface()=default
virtual uint32_t get_space_id() const =0
std::unique_ptr< MemoryInterface > make_memory(uint32_t space_id) override
MemoryProvider(RangeCheckInterface &range_check, ExecutionIdGetterInterface &execution_id_manager, EventEmitterInterface< MemoryEvent > &event_emitter)
ExecutionIdGetterInterface & execution_id_manager
EventEmitterInterface< MemoryEvent > & events
RangeCheckInterface & range_check
virtual std::unique_ptr< MemoryInterface > make_memory(uint32_t space_id)=0
virtual ~MemoryProviderInterface()=default
uint32_t get_space_id() const override
void set(MemoryAddress index, MemoryValue value) override
unordered_flat_map< size_t, MemoryValue > memory
const MemoryValue & get(MemoryAddress index) const override
MemoryStore(uint32_t space_id=0)
EventEmitter< DataCopyEvent > event_emitter
constexpr auto MemoryAddressTag
::ankerl::unordered_dense::map< Key, T > unordered_flat_map
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept