unsafe 😱
This commit is contained in:
parent
3ef8ddb66a
commit
91608d5100
13
src/run.rs
13
src/run.rs
@ -79,17 +79,24 @@ impl Run{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
pub fn finish(&mut self,time:Time)->Result<(),Error>{
|
pub fn finish(&mut self,time:Time)->Result<(),Error>{
|
||||||
match &self.state{
|
//code based on std::mem::replace
|
||||||
|
let dest=&mut self.state;
|
||||||
|
//let's ignore ownership rules for a moment
|
||||||
|
unsafe{
|
||||||
|
let state=std::ptr::read(dest);
|
||||||
|
match state{
|
||||||
RunState::Created=>Err(Error::NotStarted),
|
RunState::Created=>Err(Error::NotStarted),
|
||||||
RunState::Started{timer}=>{
|
RunState::Started{timer}=>{
|
||||||
self.state=RunState::Finished{
|
let src=RunState::Finished{
|
||||||
timer:TimerFixed::<Realtime,Paused>::new(time,timer.time(time)),
|
timer:timer.pause(time),
|
||||||
};
|
};
|
||||||
|
std::ptr::write(dest,src);
|
||||||
Ok(())
|
Ok(())
|
||||||
},
|
},
|
||||||
RunState::Finished{..}=>Err(Error::AlreadyFinished),
|
RunState::Finished{..}=>Err(Error::AlreadyFinished),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
pub fn flag(&mut self,flag_reason:FlagReason){
|
pub fn flag(&mut self,flag_reason:FlagReason){
|
||||||
//don't replace the first reason the run was flagged
|
//don't replace the first reason the run was flagged
|
||||||
if self.flagged.is_none(){
|
if self.flagged.is_none(){
|
||||||
|
Loading…
Reference in New Issue
Block a user