use super::progress_state::*;
use std::sync::atomic::*;
#[derive(Debug, Default)]
pub struct ConEmuProgressStateTracker {
pub progress: AtomicU64,
pub size: AtomicU64,
}
impl ConEmuProgressStateTracker {
pub fn start(&self, size: u64) {
self.size.store(size, Ordering::Relaxed);
ConEmuProgressState::Percent.write(0);
}
pub fn add(&self, count: u64) {
self.progress.fetch_add(count, Ordering::Relaxed);
self.update();
}
pub fn update(&self) {
let progress: u64 = self.progress.load(Ordering::Relaxed);
let size: u64 = self.size.load(Ordering::Relaxed);
let percent = progress * 100 / size;
ConEmuProgressState::Percent.write(percent as u8);
}
}
impl Drop for ConEmuProgressStateTracker {
fn drop(&mut self) {
ConEmuProgressState::Remove.write(0);
}
}