mod load;
mod store;
use crate::FinalizeTypes;
use console::{
network::prelude::*,
program::{Identifier, Literal, Plaintext, Register, Value},
types::{U16, U32},
};
use synthesizer_program::{
FinalizeGlobalState,
FinalizeRegistersState,
Operand,
RegistersLoad,
RegistersStore,
StackMatches,
StackProgram,
};
use indexmap::IndexMap;
#[derive(Clone)]
pub struct FinalizeRegisters<N: Network> {
state: FinalizeGlobalState,
transition_id: N::TransitionID,
function_name: Identifier<N>,
finalize_types: FinalizeTypes<N>,
registers: IndexMap<u64, Value<N>>,
nonce: u64,
last_register: Option<u64>,
}
impl<N: Network> FinalizeRegisters<N> {
#[inline]
pub fn new(
state: FinalizeGlobalState,
transition_id: N::TransitionID,
function_name: Identifier<N>,
finalize_types: FinalizeTypes<N>,
nonce: u64,
) -> Self {
Self {
state,
transition_id,
finalize_types,
function_name,
registers: IndexMap::new(),
nonce,
last_register: None,
}
}
}
impl<N: Network> FinalizeRegistersState<N> for FinalizeRegisters<N> {
#[inline]
fn state(&self) -> &FinalizeGlobalState {
&self.state
}
#[inline]
fn transition_id(&self) -> &N::TransitionID {
&self.transition_id
}
#[inline]
fn function_name(&self) -> &Identifier<N> {
&self.function_name
}
#[inline]
fn nonce(&self) -> u64 {
self.nonce
}
}