Longfellow ZK
0290cb32
Loading...
Searching...
No Matches
lib
algebra
permutations.h
1
// Copyright 2025 Google LLC.
2
//
3
// Licensed under the Apache License, Version 2.0 (the "License");
4
// you may not use this file except in compliance with the License.
5
// You may obtain a copy of the License at
6
//
7
// http://www.apache.org/licenses/LICENSE-2.0
8
//
9
// Unless required by applicable law or agreed to in writing, software
10
// distributed under the License is distributed on an "AS IS" BASIS,
11
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
// See the License for the specific language governing permissions and
13
// limitations under the License.
14
15
#ifndef PRIVACY_PROOFS_ZK_LIB_ALGEBRA_PERMUTATIONS_H_
16
#define PRIVACY_PROOFS_ZK_LIB_ALGEBRA_PERMUTATIONS_H_
17
18
#include <stddef.h>
19
20
#include <utility>
21
22
namespace
proofs {
23
24
template
<
class
Elt>
25
class
Permutations
{
26
public
:
27
static
void
bitrev(Elt A[
/*n*/
],
size_t
n) {
28
size_t
revi = 0;
29
for
(
size_t
i = 0; i < n - 1; ++i) {
30
if
(i < revi) {
31
std::swap(A[i], A[revi]);
32
}
33
34
bitrev_increment(&revi, n);
35
}
36
}
37
38
private
:
39
static
void
bitrev_increment(
size_t
* j,
size_t
bit) {
40
do
{
41
bit >>= 1;
42
*j ^= bit;
43
}
while
(!(*j & bit));
44
}
45
};
46
}
// namespace proofs
47
48
#endif
// PRIVACY_PROOFS_ZK_LIB_ALGEBRA_PERMUTATIONS_H_
proofs::Permutations
Definition
permutations.h:25
Generated by
1.15.0