1use std::collections::HashSet;
4use std::sync::atomic::{AtomicU64, Ordering};
5use std::sync::Mutex;
6
7#[derive(Default)]
9pub struct ColumnWarmState {
10 warmed: Mutex<HashSet<usize>>,
11 fetches: AtomicU64,
12}
13
14impl ColumnWarmState {
15 pub fn prefetch(&self, slot: usize) -> bool {
17 let mut warmed = self.warmed.lock().expect("column warm lock");
18 if warmed.insert(slot) {
19 self.fetches.fetch_add(1, Ordering::Relaxed);
20 true
21 } else {
22 false
23 }
24 }
25
26 pub fn fetches(&self) -> u64 {
27 self.fetches.load(Ordering::Relaxed)
28 }
29}