git_internal/internal/pack/
waitlist.rs1use crate::hash::SHA1;
2use crate::internal::pack::cache_object::CacheObject;
3use dashmap::DashMap;
4
5#[derive(Default, Debug)]
8pub struct Waitlist {
9 pub map_offset: DashMap<usize, Vec<CacheObject>>,
11 pub map_ref: DashMap<SHA1, Vec<CacheObject>>,
12}
13
14impl Waitlist {
15 pub fn new() -> Self {
16 Self::default()
17 }
18
19 pub fn insert_offset(&self, offset: usize, obj: CacheObject) {
20 self.map_offset.entry(offset).or_default().push(obj);
21 }
22
23 pub fn insert_ref(&self, hash: SHA1, obj: CacheObject) {
24 self.map_ref.entry(hash).or_default().push(obj);
25 }
26
27 pub fn take(&self, offset: usize, hash: SHA1) -> Vec<CacheObject> {
30 let mut res = Vec::new();
31 if let Some((_, vec)) = self.map_offset.remove(&offset) {
32 res.extend(vec);
33 }
34 if let Some((_, vec)) = self.map_ref.remove(&hash) {
35 res.extend(vec);
36 }
37 res
38 }
39}