barretenberg
Loading...
Searching...
No Matches
nested_containers.hpp
1#pragma once
2#include "barretenberg/polynomials/univariate.hpp"
3#include <tuple>
4
5namespace proof_system {
6
13template <template <typename, size_t, size_t> typename InnerContainer,
14 typename ValueType,
15 auto domain_end,
16 size_t domain_start = 0,
17 typename IS = decltype(std::make_index_sequence<domain_end.size()>())>
19template <template <typename, size_t, size_t> typename InnerContainer,
20 typename ValueType,
21 auto domain_end,
22 size_t domain_start,
23 std::size_t... I>
24struct TupleOfContainersOverArray<InnerContainer, ValueType, domain_end, domain_start, std::index_sequence<I...>> {
25 using type = std::tuple<InnerContainer<ValueType, domain_end[I], domain_start>...>;
26};
27
28// Helpers
29template <typename ValueType, size_t, size_t> using ExtractValueType = ValueType;
30
31template <typename Tuple>
32using HomogeneousTupleToArray = std::array<std::tuple_element_t<0, Tuple>, std::tuple_size_v<Tuple>>;
33
34// Types needed for sumcheck and folding.
35template <typename FF, auto LENGTHS>
37
38template <typename FF, auto LENGTHS>
40
41template <typename FF, auto LENGTHS> using ArrayOfValues = HomogeneousTupleToArray<TupleOfValues<FF, LENGTHS>>;
42
43} // namespace proof_system
Generic templates for constructing a container of containers of varying length, where the various len...
Definition: nested_containers.hpp:18