concurrent reading

This commit is contained in:
Jana Dönszelmann 2026-02-25 15:32:13 +01:00
parent 3d9114dea9
commit 1f6679f57f
No known key found for this signature in database
8 changed files with 104 additions and 84 deletions

View file

@ -1,4 +1,4 @@
use std::{collections::HashMap, iter, mem, rc::Rc};
use std::{collections::HashMap, iter, mem, sync::Arc};
use crate::tui::{
filter::Filter,
@ -58,7 +58,7 @@ impl LogViewer {
pub fn filtered_root_stream(&self) -> Box<dyn LogStream> {
let mut curr = self.root_stream.clone();
for filter in self.filters.get() {
curr = Box::new(curr.filter(Rc::clone(filter)));
curr = Box::new(curr.filter(Arc::clone(filter)));
}
curr
@ -78,12 +78,12 @@ impl LogViewer {
fn find_elem_in_stream(
stream: &dyn LogStream,
elem: &Rc<LogEntry>,
elem: &Arc<LogEntry>,
) -> Option<Box<dyn LogStream>> {
let mut temp_stream = stream.clone();
let mut max = 100usize;
while let Some((curr, _)) = temp_stream.next() {
if Rc::ptr_eq(&curr, elem) {
if Arc::ptr_eq(&curr, elem) {
return Some(temp_stream);
}
@ -162,8 +162,8 @@ impl LogViewer {
self.stack = new_stack;
}
pub fn add_filter(&mut self, filter: Rc<Filter>) {
self.filters.push(Rc::clone(&filter));
pub fn add_filter(&mut self, filter: Arc<Filter>) {
self.filters.push(Arc::clone(&filter));
self.update_filters();
}
@ -200,7 +200,7 @@ impl LogViewer {
}
}
pub fn items(&mut self, max: usize) -> Option<(Vec<(Rc<LogEntry>, usize)>, usize)> {
pub fn items(&mut self, max: usize) -> Option<(Vec<(Arc<LogEntry>, usize)>, usize)> {
let mut temp_iter = self.curr.iter.clone();
let mut res = Vec::new();
for _ in 0..max {
@ -241,7 +241,7 @@ impl LogViewer {
}
}
pub fn selected(&self) -> Option<(Rc<LogEntry>, usize)> {
pub fn selected(&self) -> Option<(Arc<LogEntry>, usize)> {
self.curr.selected()
}