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)
|
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) {
|
pub fn insert_impending_request(&mut self, request: Prd) {
|
||||||
self.impending_requests.push(request);
|
self.impending_requests.push(request);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user