Add get_latest_commited_state method to Process
This commit is contained in:
parent
ef556fddaa
commit
4eda758b64
@ -283,6 +283,37 @@ impl Process {
|
||||
self.states.split_off(pos)
|
||||
}
|
||||
|
||||
pub fn get_latest_commited_state(&self) -> Option<&ProcessState> {
|
||||
if self.states.is_empty() {
|
||||
return None;
|
||||
}
|
||||
|
||||
let latest_state = self.get_latest_state().unwrap();
|
||||
|
||||
// a commited outpoint with an index of u32::MAX is a pending state
|
||||
if latest_state.commited_in.vout != u32::MAX {
|
||||
// This state is commited, there's no pending state
|
||||
return Some(latest_state);
|
||||
}
|
||||
|
||||
// We look for the last state before all the pending states
|
||||
let latest_outpoint = latest_state.commited_in;
|
||||
|
||||
let pos = self
|
||||
.states
|
||||
.iter()
|
||||
.position(|s| s.commited_in == latest_outpoint)
|
||||
.unwrap();
|
||||
|
||||
if pos == 0 {
|
||||
// There's no commited states, we just return None
|
||||
return None;
|
||||
} else {
|
||||
// The state just before is last commited state
|
||||
return self.get_state_at(pos-1);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn insert_impending_request(&mut self, request: Prd) {
|
||||
self.impending_requests.push(request);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user