barretenberg
Loading...
Searching...
No Matches
dynamic_array.hpp
1#pragma once
2#include "../circuit_builders/circuit_builders_fwd.hpp"
3#include "ram_table.hpp"
4namespace proof_system::plonk {
5namespace stdlib {
6
12template <typename Builder> class DynamicArray {
13 private:
17
18 public:
19 DynamicArray(Builder* builder, const size_t maximum_size);
20
21 DynamicArray(const DynamicArray& other);
23
24 DynamicArray& operator=(const DynamicArray& other);
26
27 void resize(const field_pt& new_length, const field_pt default_value = 0);
28
29 field_pt read(const field_pt& index) const;
30 void write(const field_pt& index, const field_pt& value);
31
32 void push(const field_pt& index);
33 void pop();
34
35 void conditional_push(const bool_pt& predicate, const field_pt& index);
36 void conditional_pop(const bool_pt& predicate);
37
38 field_pt size() const { return _length; }
39 size_t native_size() const { return static_cast<size_t>(static_cast<uint256_t>(_length.get_value())); }
40 size_t max_size() const { return _max_size; }
41
42 Builder* get_context() const { return _context; }
43
44 private:
45 Builder* _context = nullptr;
46 size_t _max_size;
47 field_pt _length = 0;
48 mutable ram_table<Builder> _inner_table;
49};
50
51EXTERN_STDLIB_ULTRA_TYPE(DynamicArray);
52
53} // namespace stdlib
54} // namespace proof_system::plonk
Definition: uint256.hpp:25
Definition: standard_circuit_builder.hpp:12
A dynamic array of field elements.
Definition: dynamic_array.hpp:12
void pop()
Pop a field element off of the dynamic array.
Definition: dynamic_array.cpp:231
void push(const field_pt &index)
Push a field element onto the dynamic array.
Definition: dynamic_array.cpp:216
void conditional_push(const bool_pt &predicate, const field_pt &index)
Conditionally push a field element onto the dynamic array.
Definition: dynamic_array.cpp:249
void resize(const field_pt &new_length, const field_pt default_value=0)
Resize array. Current method v. inefficient!
Definition: dynamic_array.cpp:103
void conditional_pop(const bool_pt &predicate)
Conditionallhy pop a field element off of the dynamic array.
Definition: dynamic_array.cpp:265
DynamicArray & operator=(const DynamicArray &other)
Assignment Operator.
Definition: dynamic_array.cpp:72
void write(const field_pt &index, const field_pt &value)
Write a field element into the dynamic array at an index value.
Definition: dynamic_array.cpp:193
field_pt read(const field_pt &index) const
Read a field element from the dynamic array at an index value.
Definition: dynamic_array.cpp:169
Definition: field.hpp:10
Definition: ram_table.hpp:10
Definition: witness.hpp:10
Definition: widget.bench.cpp:13