remainder/
circuit_building_context.rs1use once_cell::sync::Lazy;
4use std::sync::atomic::{AtomicUsize, Ordering};
5
6#[derive(Debug, Default)]
9pub struct CircuitBuildingContext {
10 node_id: AtomicUsize,
11 input_layer_id: AtomicUsize,
12 layer_id: AtomicUsize,
13 fiat_shamir_challenge_layer_id: AtomicUsize,
14}
15
16static CONTEXT: Lazy<CircuitBuildingContext> = Lazy::new(|| CircuitBuildingContext {
17 node_id: AtomicUsize::new(0),
18 input_layer_id: AtomicUsize::new(0),
19 layer_id: AtomicUsize::new(0),
20 fiat_shamir_challenge_layer_id: AtomicUsize::new(0),
21});
22
23impl CircuitBuildingContext {
24 pub fn next_node_id() -> usize {
26 CONTEXT.node_id.fetch_add(1, Ordering::Relaxed)
27 }
28
29 pub fn next_input_layer_id() -> usize {
31 CONTEXT.input_layer_id.fetch_add(1, Ordering::Relaxed)
32 }
33
34 pub fn next_layer_id() -> usize {
36 CONTEXT.layer_id.fetch_add(1, Ordering::Relaxed)
37 }
38
39 pub fn next_fiat_shamir_challenge_layer_id() -> usize {
41 CONTEXT
42 .fiat_shamir_challenge_layer_id
43 .fetch_add(1, Ordering::Relaxed)
44 }
45}