Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
accumulation_vector.hpp
Go to the documentation of this file.
1 
12 #ifndef ACCUMULATION_VECTOR_HPP_
13 #define ACCUMULATION_VECTOR_HPP_
14 
15 #include <iostream>
17 
18 namespace libsnark
19 {
20 
21 template<typename T> class accumulation_vector;
22 
23 template<typename T>
24 std::ostream &operator<<(std::ostream &out, const accumulation_vector<T> &v);
25 
26 template<typename T>
27 std::istream &operator>>(std::istream &in, accumulation_vector<T> &v);
28 
34 template<typename T> class accumulation_vector
35 {
36 public:
37  T first;
39 
40  accumulation_vector() = default;
41  accumulation_vector(const accumulation_vector<T> &other) = default;
44  : first(std::move(first)), rest(std::move(rest))
45  {
46  }
47  accumulation_vector(T &&first, std::vector<T> &&v)
48  : first(std::move(first)), rest(std::move(v))
49  {
50  }
51  accumulation_vector(std::vector<T> &&v)
52  : first(T::zero()), rest(std::move(v))
53  {
54  }
55 
57  default;
59 
60  bool operator==(const accumulation_vector<T> &other) const;
61 
62  bool is_fully_accumulated() const;
63 
64  size_t domain_size() const;
65  size_t size() const;
66  size_t size_in_bits() const;
67 
68  template<typename FieldT>
70  const typename std::vector<FieldT>::const_iterator &it_begin,
71  const typename std::vector<FieldT>::const_iterator &it_end,
72  const size_t offset) const;
73 };
74 
75 template<typename T>
76 std::ostream &operator<<(std::ostream &out, const accumulation_vector<T> &v);
77 
78 template<typename T>
79 std::istream &operator>>(std::istream &in, accumulation_vector<T> &v);
80 
81 } // namespace libsnark
82 
84 
85 #endif // ACCUMULATION_VECTOR_HPP_
libsnark
Definition: accumulation_vector.hpp:18
libsnark::operator<<
std::ostream & operator<<(std::ostream &out, const accumulation_vector< T > &v)
libsnark::accumulation_vector::rest
sparse_vector< T > rest
Definition: accumulation_vector.hpp:38
libsnark::accumulation_vector
Definition: accumulation_vector.hpp:21
libsnark::accumulation_vector::accumulation_vector
accumulation_vector(T &&first, sparse_vector< T > &&rest)
Definition: accumulation_vector.hpp:43
libsnark::accumulation_vector::first
T first
Definition: accumulation_vector.hpp:37
accumulation_vector.tcc
sparse_vector.hpp
libsnark::accumulation_vector::size_in_bits
size_t size_in_bits() const
libsnark::accumulation_vector::accumulation_vector
accumulation_vector()=default
libsnark::accumulation_vector::accumulation_vector
accumulation_vector(T &&first, std::vector< T > &&v)
Definition: accumulation_vector.hpp:47
libsnark::accumulation_vector::size
size_t size() const
libsnark::operator>>
std::istream & operator>>(std::istream &in, accumulation_vector< T > &v)
libsnark::accumulation_vector::operator=
accumulation_vector< T > & operator=(const accumulation_vector< T > &other)=default
libsnark::accumulation_vector::operator==
bool operator==(const accumulation_vector< T > &other) const
libsnark::accumulation_vector::accumulation_vector
accumulation_vector(std::vector< T > &&v)
Definition: accumulation_vector.hpp:51
libsnark::accumulation_vector::accumulate_chunk
accumulation_vector< T > accumulate_chunk(const typename std::vector< FieldT >::const_iterator &it_begin, const typename std::vector< FieldT >::const_iterator &it_end, const size_t offset) const
libsnark::accumulation_vector::domain_size
size_t domain_size() const
libsnark::sparse_vector
Definition: sparse_vector.hpp:21
libsnark::accumulation_vector::is_fully_accumulated
bool is_fully_accumulated() const