parallel_disk_usage/hardlink/hardlink_list/
iter.rs1use super::{HardlinkList, Value};
2use crate::{hardlink::LinkPathList, inode::InodeNumber};
3use dashmap::{iter::Iter as DashIter, mapref::multiple::RefMulti};
4use pipe_trait::Pipe;
5
6#[derive(derive_more::Debug)]
8#[debug(bound())]
9#[debug("Iter(..)")]
10pub struct Iter<'a, Size>(DashIter<'a, InodeNumber, Value<Size>>);
11
12impl<Size> HardlinkList<Size> {
13 pub fn iter(&self) -> Iter<'_, Size> {
15 self.0.iter().pipe(Iter)
16 }
17}
18
19#[derive(derive_more::Debug)]
21#[debug(bound())]
22#[debug("Item(..)")]
23pub struct Item<'a, Size>(RefMulti<'a, InodeNumber, Value<Size>>);
24
25impl<'a, Size> Iterator for Iter<'a, Size> {
26 type Item = Item<'a, Size>;
27 fn next(&mut self) -> Option<Self::Item> {
28 self.0.next().map(Item)
29 }
30}
31
32impl<'a, Size> Item<'a, Size> {
33 #[inline]
35 pub fn ino(&self) -> InodeNumber {
36 *self.0.key()
37 }
38
39 #[inline]
41 pub fn size(&self) -> &Size {
42 &self.0.value().size
43 }
44
45 #[inline]
47 pub fn links(&self) -> u64 {
48 self.0.value().links
49 }
50
51 #[inline]
53 pub fn paths(&self) -> &LinkPathList {
54 &self.0.value().paths
55 }
56}