add last method to queue

This commit is contained in:
soruh 2023-08-13 21:57:45 +02:00
parent e8f243e854
commit fe9b7df81f

View File

@ -137,6 +137,28 @@ impl<T: FromBytes + FromZeroes + AsBytes + Unaligned + Clone + Copy> FilePointer
Some(queue) Some(queue)
} }
pub fn is_empty(self, reader: &impl ReaderTrait) -> bool {
self.length(reader) == 0
}
pub fn last(self, reader: &impl ReaderTrait) -> Option<T> {
let this = reader.read(self);
if this.length.get() == 0 {
return None;
}
let mut next = this.head;
for _ in 1..this.length.get() {
// println!("free [{i}] {ptr:?}");
next = *reader.read(field_ptr!(next, QueueElement<T>, next));
}
Some(*reader.read(field_ptr!(next, QueueElement<T>, data)))
}
pub fn length(self, reader: &impl ReaderTrait) -> u64 { pub fn length(self, reader: &impl ReaderTrait) -> u64 {
reader.read(field_ptr!(self, Queue<T>, length)).get() reader.read(field_ptr!(self, Queue<T>, length)).get()
} }