Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
memory.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <memory>
4
11
12namespace bb::avm2::simulation {
13
15 public:
16 virtual ~MemoryInterface() = default;
17
18 // Returned reference is only valid until the next call to set.
19 virtual const MemoryValue& get(MemoryAddress index) const = 0;
20 // Sets value. Invalidates all references to previous values.
21 virtual void set(MemoryAddress index, MemoryValue value) = 0;
22
23 virtual uint32_t get_space_id() const = 0;
24
25 // This checks the memory tag. It does not produce events.
26 virtual bool is_valid_address(const MemoryValue& address) { return address.get_tag() == MemoryAddressTag; }
27};
28
57
59 public:
60 virtual ~MemoryProviderInterface() = default;
61 virtual std::unique_ptr<MemoryInterface> make_memory(uint32_t space_id) = 0;
62};
63
84
85// Just a map that doesn't emit events or do anything else.
87 public:
91
92 const MemoryValue& get(MemoryAddress index) const override
93 {
94 static const auto default_value = MemoryValue::from<FF>(0);
95 auto it = memory.find(index);
96 return it != memory.end() ? it->second : default_value;
97 }
98 void set(MemoryAddress index, MemoryValue value) override { memory[index] = value; }
99 uint32_t get_space_id() const override { return space_id; }
100
101 private:
104};
105
106} // namespace bb::avm2::simulation
ValueTag get_tag() const
Memory(uint32_t space_id, RangeCheckInterface &range_check, ExecutionIdGetterInterface &execution_id_manager, EventEmitterInterface< MemoryEvent > &event_emitter)
Definition memory.hpp:31
ExecutionIdGetterInterface & execution_id_manager
Definition memory.hpp:51
unordered_flat_map< size_t, MemoryValue > memory
Definition memory.hpp:48
uint32_t get_space_id() const override
Definition memory.hpp:44
void validate_tag(const MemoryValue &value) const
Definition memory.cpp:45
EventEmitterInterface< MemoryEvent > & events
Definition memory.hpp:53
const MemoryValue & get(MemoryAddress index) const override
Definition memory.cpp:26
RangeCheckInterface & range_check
Definition memory.hpp:50
void set(MemoryAddress index, MemoryValue value) override
Definition memory.cpp:12
virtual void set(MemoryAddress index, MemoryValue value)=0
virtual bool is_valid_address(const MemoryValue &address)
Definition memory.hpp:26
virtual const MemoryValue & get(MemoryAddress index) const =0
virtual uint32_t get_space_id() const =0
std::unique_ptr< MemoryInterface > make_memory(uint32_t space_id) override
Definition memory.hpp:74
MemoryProvider(RangeCheckInterface &range_check, ExecutionIdGetterInterface &execution_id_manager, EventEmitterInterface< MemoryEvent > &event_emitter)
Definition memory.hpp:66
ExecutionIdGetterInterface & execution_id_manager
Definition memory.hpp:81
EventEmitterInterface< MemoryEvent > & events
Definition memory.hpp:82
RangeCheckInterface & range_check
Definition memory.hpp:80
virtual std::unique_ptr< MemoryInterface > make_memory(uint32_t space_id)=0
uint32_t get_space_id() const override
Definition memory.hpp:99
void set(MemoryAddress index, MemoryValue value) override
Definition memory.hpp:98
unordered_flat_map< size_t, MemoryValue > memory
Definition memory.hpp:103
const MemoryValue & get(MemoryAddress index) const override
Definition memory.hpp:92
MemoryStore(uint32_t space_id=0)
Definition memory.hpp:88
EventEmitter< DataCopyEvent > event_emitter
uint32_t MemoryAddress
constexpr auto MemoryAddressTag
::ankerl::unordered_dense::map< Key, T > unordered_flat_map
Definition map.hpp:15
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13