Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
memory_manager.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <cstdint>
4#include <map>
5#include <optional>
6#include <vector>
7
11
13 private:
14 // map of Tag -> vector of memory addresses
16 // inverse map MemoryAddress -> Tag
17 std::map<uint32_t, bb::avm2::MemoryTag> memory_address_to_tag;
18
19 // Public Storage used addresses
20 std::vector<bb::avm2::FF> storage_addresses;
21
24 ResolvedAddress resolve_address(VariableRef address, uint32_t absolute_address, uint32_t max_operand_address);
25 ResolvedAddress resolve_address(AddressRef address, uint32_t max_operand_address);
27 uint32_t index,
28 uint32_t min_value,
29 uint32_t max_value);
30
31 uint32_t base_offset = 0;
32
33 public:
34 MemoryManager() = default;
35 MemoryManager(const MemoryManager& other) = default;
37 MemoryManager(MemoryManager&& other) = default;
39 ~MemoryManager() = default;
43 bool is_memory_address_set(uint16_t address);
44
57
58 // Append used slot to storage_addresses
60 // Get slot from storage_addresses
61 std::optional<bb::avm2::FF> get_slot(uint16_t slot_offset_index);
62
63 void set_base_offset(uint32_t base_offset);
64};
bb::avm2::testing::OperandBuilder get_memory_address_operand(bb::avm2::testing::OperandBuilder operand, AddressingMode mode)
std::optional< uint16_t > get_memory_offset_16(bb::avm2::MemoryTag tag, uint32_t address_index)
std::map< bb::avm2::MemoryTag, std::vector< uint32_t > > stored_variables
~MemoryManager()=default
MemoryManager & operator=(const MemoryManager &other)
std::optional< std::pair< ResolvedAddress, bb::avm2::testing::OperandBuilder > > get_resolved_address_and_operand_8(ParamRef address)
MemoryManager & operator=(MemoryManager &&other)=default
MemoryManager(MemoryManager &&other)=default
std::map< uint32_t, bb::avm2::MemoryTag > memory_address_to_tag
ResolvedAddress resolve_address(VariableRef address, uint32_t absolute_address, uint32_t max_operand_address)
std::optional< bb::avm2::FF > get_slot(uint16_t slot_offset_index)
bool is_memory_address_set(uint16_t address)
MemoryManager()=default
MemoryManager(const MemoryManager &other)=default
void set_memory_address(bb::avm2::MemoryTag tag, uint32_t address)
void append_slot(bb::avm2::FF slot)
void set_base_offset(uint32_t base_offset)
std::optional< uint8_t > get_memory_offset_8(bb::avm2::MemoryTag tag, uint32_t address_index)
std::optional< uint32_t > get_variable_address(bb::avm2::MemoryTag tag, uint32_t index, uint32_t min_value, uint32_t max_value)
std::vector< bb::avm2::FF > storage_addresses
std::optional< std::pair< ResolvedAddress, bb::avm2::testing::OperandBuilder > > get_resolved_address_and_operand_16(ParamRef address)
AddressingMode
std::variant< VariableRef, AddressRef > ParamRef
AvmFlavorSettings::FF FF
Definition field.hpp:10
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
Output of resolving an address in the memory manager In order to resolve a given absolute address wit...