Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
integer_permutation.hpp
Go to the documentation of this file.
1 
13 #ifndef INTEGER_PERMUTATION_HPP_
14 #define INTEGER_PERMUTATION_HPP_
15 
16 #include <cstddef>
17 #include <vector>
18 
19 namespace libsnark
20 {
21 
23 {
24 private:
25  std::vector<size_t> contents; /* offset by min_element */
26 
27 public:
28  size_t min_element;
29  size_t max_element;
30 
31  integer_permutation(const size_t size = 0);
32  integer_permutation(const size_t min_element, const size_t max_element);
33 
34  integer_permutation(const integer_permutation &other) = default;
35  integer_permutation &operator=(const integer_permutation &other) = default;
36 
37  size_t size() const;
38  bool operator==(const integer_permutation &other) const;
39 
40  void set(const size_t position, const size_t value);
41  size_t get(const size_t position) const;
42 
43  bool is_valid() const;
46  const size_t slice_min_element, const size_t slice_max_element) const;
47 
48  /* Similarly to std::next_permutation this transforms the current
49  integer permutation into the next lexicographically ordered
50  permutation; returns false if the last permutation was reached and
51  this is now the identity permutation on [min_element .. max_element] */
52  bool next_permutation();
53 
54  void random_shuffle();
55 };
56 
57 } // namespace libsnark
58 
59 #endif // INTEGER_PERMUTATION_HPP_
libsnark::integer_permutation::inverse
integer_permutation inverse() const
Definition: integer_permutation.cpp:82
libsnark::integer_permutation::is_valid
bool is_valid() const
Definition: integer_permutation.cpp:66
libsnark
Definition: accumulation_vector.hpp:18
libsnark::integer_permutation::max_element
size_t max_element
Definition: integer_permutation.hpp:29
libsnark::integer_permutation::random_shuffle
void random_shuffle()
Definition: integer_permutation.cpp:122
libsnark::integer_permutation::min_element
size_t min_element
Definition: integer_permutation.hpp:28
libsnark::integer_permutation::operator=
integer_permutation & operator=(const integer_permutation &other)=default
libsnark::integer_permutation::get
size_t get(const size_t position) const
Definition: integer_permutation.cpp:60
libsnark::integer_permutation::set
void set(const size_t position, const size_t value)
Definition: integer_permutation.cpp:54
libsnark::integer_permutation::integer_permutation
integer_permutation(const size_t size=0)
Definition: integer_permutation.cpp:24
libsnark::integer_permutation::next_permutation
bool next_permutation()
Definition: integer_permutation.cpp:117
libsnark::integer_permutation::size
size_t size() const
Definition: integer_permutation.cpp:41
libsnark::integer_permutation
Definition: integer_permutation.hpp:22
libsnark::integer_permutation::slice
integer_permutation slice(const size_t slice_min_element, const size_t slice_max_element) const
Definition: integer_permutation.cpp:98
libsnark::integer_permutation::operator==
bool operator==(const integer_permutation &other) const
Definition: integer_permutation.cpp:46