From f115b9104ae50519c41ad01278b2fd6f1b1fdb6d Mon Sep 17 00:00:00 2001 From: Rhys Lloyd Date: Sun, 14 Dec 2025 14:22:03 -0800 Subject: [PATCH] count jumps --- src/main.rs | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/src/main.rs b/src/main.rs index e34b0e7..679dba5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -30,22 +30,38 @@ async fn main()->Result<(),Error>{ let Some(dir)=std::env::args().skip(1).next()else{ return Err(Error::InvalidArgs); }; + + struct FoldState{ + count:usize, + jumps:u64, + } + let available_parallelism=std::thread::available_parallelism()?.get(); let read_dir=tokio::fs::read_dir(dir).await?; - tokio_stream::wrappers::ReadDirStream::new(read_dir).enumerate().map(|(count,dir_entry)|async move{ + let tally=tokio_stream::wrappers::ReadDirStream::new(read_dir).map(|dir_entry|async move{ let entry=dir_entry?; let path=entry.path(); let file=tokio::fs::read(path.as_path()).await?; - Ok((path,file,count)) + Ok((path,file)) }) .buffer_unordered(PREFETCH_QUEUE) - .try_for_each_concurrent(available_parallelism,|(path,file,count)|async move{ + .map(|result:Result<_,Error>|async move{ + let (path,file)=result?; let result=tokio::task::spawn_blocking(||v0::read_all_to_block(std::io::Cursor::new(file))).await?; - println!("{count} {:?}",path.file_name()); - if let Err(err)=result{ - return Err(Error::BotFile{path,err}); + match result{ + Err(err)=>Err(Error::BotFile{path,err}), + Ok(block)=>Ok((path,block)), } - Ok(()) + }) + .buffer_unordered(available_parallelism) + .try_fold(FoldState{count:0,jumps:0},async|mut state,(path,block)|{ + state.count+=1; + state.jumps+=block.sound_events.iter() + .filter(|event|event.event.sound_type==v0::SoundType::JumpGround) + .count() as u64; + println!("{} {:?} tally={}",state.count,path.file_name(),state.jumps); + Ok(state) }).await?; + println!("total jump count = {}",tally.jumps); Ok(()) }