2#include "barretenberg/common/assert.hpp"
4#include <initializer_list>
23 explicit RefVector(
const std::vector<T*>& ptr_vector)
27 explicit RefVector(std::vector<T>& vector)
28 : storage(vector.size())
30 for (
size_t i = 0; i < vector.size(); i++) {
31 storage[i] = &vector[i];
35 template <
typename... Ts>
RefVector(T& ref, Ts&... rest)
37 storage.push_back(&ref);
38 (storage.push_back(&rest), ...);
41 T& operator[](std::size_t idx)
const
43 ASSERT(idx < storage.size());
64 T& operator*()
const {
return (*vector)[pos]; }
66 iterator& operator++()
79 bool operator==(iterator
const& other)
const {
return pos == other.pos; }
80 bool operator!=(iterator
const& other)
const {
return pos != other.pos; }
87 std::size_t size()
const {
return storage.size(); }
89 void push_back(T& element) { storage.push_back(element); }
90 iterator begin()
const {
return iterator(
this, 0); }
91 iterator end()
const {
return iterator(
this, storage.size()); }
93 template <
typename ConvertibleFromT>
operator std::vector<ConvertibleFromT>()
const
95 std::vector<ConvertibleFromT> ret;
96 for (T* elem : storage) {
102 std::vector<T*>& get_storage() {
return storage; }
103 const std::vector<T*>& get_storage()
const {
return storage; }
106 std::vector<T*> storage;
129 concatenated.get_storage().reserve(ref_vector.size() + (ref_vectors.size() + ...));
131 auto append = [&](
const auto& vec) {
132 std::copy(vec.get_storage().begin(), vec.get_storage().end(), std::back_inserter(concatenated.get_storage()));
137 (append(ref_vectors), ...);
143template <
typename T>
static std::vector<RefVector<T>> to_vector_of_ref_vectors(std::vector<std::vector<T>>& vec)
145 std::vector<RefVector<T>> result;
146 for (std::vector<T>& inner : vec) {
Nested iterator class for RefVector, based on indexing into the pointer vector. Provides semantics si...
Definition: ref_vector.hpp:51
iterator(RefVector const *vector, std::size_t pos)
Constructs an iterator for a given RefVector object.
Definition: ref_vector.hpp:59
A template class for a reference vector. Behaves as if std::vector<T&> was possible.
Definition: ref_vector.hpp:20