revm_database/states/
transition_state.rs1use super::TransitionAccount;
2use primitives::{hash_map::Entry, Address, HashMap};
3use std::vec::Vec;
4
5#[derive(Clone, Default, Debug, PartialEq, Eq)]
7pub struct TransitionState {
8 pub transitions: HashMap<Address, TransitionAccount>,
10}
11
12impl TransitionState {
13 pub fn single(address: Address, transition: TransitionAccount) -> Self {
15 let mut transitions = HashMap::default();
16 transitions.insert(address, transition);
17 TransitionState { transitions }
18 }
19
20 pub fn take(&mut self) -> TransitionState {
25 core::mem::take(self)
26 }
27
28 pub fn add_transitions(&mut self, transitions: Vec<(Address, TransitionAccount)>) {
33 for (address, account) in transitions {
34 match self.transitions.entry(address) {
35 Entry::Occupied(entry) => {
36 let entry = entry.into_mut();
37 entry.update(account);
38 }
39 Entry::Vacant(entry) => {
40 entry.insert(account);
41 }
42 }
43 }
44 }
45}