From e325cb57e7bba286e9b8e7f18c23daaa7e973725 Mon Sep 17 00:00:00 2001 From: polsevev Date: Thu, 30 Nov 2023 19:55:36 +0100 Subject: [PATCH] Finally got generators working --- .vscode/settings.json | 5 + Cargo.lock | 12 +- Cargo.toml | 2 + src/GuiHookVec.rs | 247 ---------------------- src/algorithm.rs | 64 ------ src/assets/LDF-ComicSans/LDFComicSans.ttf | Bin 0 -> 18892 bytes src/insertSortGenerator.rs | 37 ++++ src/main.rs | 96 ++++++--- 8 files changed, 120 insertions(+), 343 deletions(-) create mode 100644 .vscode/settings.json delete mode 100644 src/GuiHookVec.rs delete mode 100644 src/algorithm.rs create mode 100644 src/assets/LDF-ComicSans/LDFComicSans.ttf create mode 100644 src/insertSortGenerator.rs diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..352a626 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "rust-analyzer.linkedProjects": [ + "./Cargo.toml" + ] +} \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index 39fbf11..d7a60b5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8,6 +8,8 @@ version = "0.1.0" dependencies = [ "anyhow", "async-trait", + "futures-core", + "futures-util", "notan", "tokio", "tokio-test", @@ -115,9 +117,9 @@ checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "async-stream" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad445822218ce64be7a341abfb0b1ea43b5c23aa83902542a4542e78309d8e5e" +checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" dependencies = [ "async-stream-impl", "futures-core", @@ -126,13 +128,13 @@ dependencies = [ [[package]] name = "async-stream-impl" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4655ae1a7b0cdf149156f780c5bf3f1352bc53cbd9e0a361a7ef7b22947e965" +checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.39", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index e8d1e54..e0d796d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,6 +8,8 @@ edition = "2021" [dependencies] anyhow = "1.0.75" async-trait = "0.1.64" +futures-core = "0.3.29" +futures-util = "0.3.29" notan = "0.11.0" tokio = {version = "1.34.0", features = ["full"] } tokio-test = "*" diff --git a/src/GuiHookVec.rs b/src/GuiHookVec.rs deleted file mode 100644 index e016712..0000000 --- a/src/GuiHookVec.rs +++ /dev/null @@ -1,247 +0,0 @@ -use crate::BarPlugin::Bar; -use async_trait::async_trait; - -#[derive(Clone, Debug)] -pub struct GuiVec { - pub list: Vec, - initialSize:usize, - pub lastTime:f64, - pub reads:i32, - pub writes:i32, - pub comps:i32, - isPaused:bool, - delay:f32, - pub done:bool, - renderSkip:i32, - skipped:i32, - lastTouched:Vec, - lastPlayed:f64, -} -#[async_trait] -pub trait SortingList { - async fn new(length: usize, delay: f32) -> Self; - - fn len(&self) -> usize; - - async fn swap(&mut self, index1: usize, index2: usize) -> bool; - - async fn draw(&mut self); - - fn randomize(&mut self); - - fn elements(&mut self) -> std::slice::Iter<'_, Bar>; - - fn get(&mut self, i: usize) -> &Bar; - - fn lessThan(&mut self, a: usize, b: usize) -> bool; - - fn lessThanEqual(&mut self, a: usize, b: usize) -> bool; - - fn isSorted(&mut self) -> bool; - - async fn set(&mut self, i: usize, elem: Bar) -> bool; - - async fn show(&mut self); - - fn getListClone(&self) -> Vec; -} -#[async_trait] -impl SortingList for GuiVec { - async fn new(length: usize, delay: f32) -> Self { - let colorStep = 360. / length as f32; - let mut list: Vec = vec![]; - let freqStep = 50. + ((2000. - 50.) / length as f32); - - for i in 1..length + 1 { - let frequency = i as f32 * freqStep; - list.push(Bar::new(i, (colorStep * i as f32) / 360.)); - } - -<<<<<<< HEAD - //Generate sounds - GuiVec { - list, - initialSize: length as usize, - lastTime: 0.0, - reads: 0, - writes: 0, - comps: 0, - isPaused: false, - delay, - done: false, - renderSkip: 1, - skipped: 0, - lastTouched: Vec::with_capacity(2), - lastPlayed: 0., -======= - - - GuiVec{ - list, - initialSize:length as usize, - lastTime: 0.0 , - reads:0, - writes:0, - comps:0, - isPaused:false, - delay, - done:false, - renderSkip:1, - skipped:0, - lastTouched:Vec::with_capacity(2), - lastPlayed:0., ->>>>>>> master - } - } - - async fn draw(&mut self) {} - - fn len(&self) -> usize { - self.list.len() - } - - async fn swap(&mut self, index1: usize, index2: usize) -> bool { - self.writes += 2; - self.reads += 2; - self.list.swap(index1, index2); - -<<<<<<< HEAD -======= - - - ->>>>>>> master - self.lastTouched.clear(); - self.lastTouched.push(index1); - self.lastTouched.push(index2); - self.draw().await; - - self.done - } - fn randomize(&mut self) {} - - fn elements(&mut self) -> std::slice::Iter<'_, Bar> { - self.list.iter() - } - - fn get(&mut self, i: usize) -> &Bar { - self.reads += 1; - self.lastTouched.clear(); - self.lastTouched.push(i); - self.list.get(i).unwrap() - } - fn lessThan(&mut self, a: usize, b: usize) -> bool { - self.comps += 1; - return self.get(a).position < self.get(b).position; - } - fn lessThanEqual(&mut self, a: usize, b: usize) -> bool { - self.comps += 1; - return self.get(a).position <= b; - } - fn isSorted(&mut self) -> bool { - self.reads += self.len() as i32; - let mut prev = 0; - for bar in self.list.iter() { - if bar.position < prev { - return false; - } else { - prev = bar.position; - } - } - true - } - async fn set(&mut self, i: usize, elem: Bar) -> bool { - self.writes += 1; - self.reads += 1; - self.list[i] = elem; - self.draw().await; -<<<<<<< HEAD - -======= - if time::get_time() + 0.1 >= self.lastPlayed{ - - self.lastPlayed = time::get_time()+0.1; - } ->>>>>>> master - self.lastTouched.clear(); - self.lastTouched.push(i); - self.done - } - async fn show(&mut self) { - loop { - if !self.done { - self.draw().await - } else { - break; - } - } - } - - fn getListClone(&self) -> Vec { - self.list.clone() - } -} - -pub struct NonGuiVec { - pub list: Vec, -} -#[async_trait] -impl SortingList for NonGuiVec { - async fn new(length: usize, delay: f32) -> Self { - let mut list = Vec::new(); - for i in 0..(length as usize) { - list.push(Bar::new(i, i as f32)) - } - NonGuiVec { list: list } - } - - fn len(&self) -> usize { - self.list.len() - } - - async fn swap(&mut self, index1: usize, index2: usize) -> bool { - self.list.swap(index1, index2); - false - } - - async fn draw(&mut self) { - self.swap(0, 0).await; - } - - fn randomize(&mut self) {} - - fn elements(&mut self) -> std::slice::Iter<'_, Bar> { - self.list.iter() - } - - fn get(&mut self, i: usize) -> &Bar { - self.list.get(i).unwrap() - } - fn lessThan(&mut self, a: usize, b: usize) -> bool { - return self.get(a).position < self.get(b).position; - } - fn lessThanEqual(&mut self, a: usize, b: usize) -> bool { - return self.get(a).position <= b; - } - fn isSorted(&mut self) -> bool { - let mut prev = 0; - for bar in self.list.iter() { - if bar.position < prev { - return false; - } else { - prev = bar.position; - } - } - true - } - async fn set(&mut self, i: usize, elem: Bar) -> bool { - self.list[i] = elem; - self.draw().await; - - false - } - async fn show(&mut self) {} - fn getListClone(&self) -> Vec { - self.list.clone() - } -} diff --git a/src/algorithm.rs b/src/algorithm.rs deleted file mode 100644 index 8662571..0000000 --- a/src/algorithm.rs +++ /dev/null @@ -1,64 +0,0 @@ -mod radixSort; -mod insertSort; -mod bubbleSort; -mod binaryHeap; -mod coctailShaker; -mod quickSort; -mod bogoSort; -mod radixSortLSD; - - -use crate::GuiHookVec::GuiVec; -use crate::GuiHookVec::SortingList; - - - -#[derive(Debug, Clone)] -pub struct Algorithm{ - algorithms:Vec -} - -impl Algorithm{ - pub fn new() -> Self{ - Algorithm { algorithms: vec![ - "insertSort".to_string(), - "bubbleSort".to_string(), - "bogoSort".to_string(), - "cocktailShaker".to_string(), - "binaryHeap".to_string(), - "quickSort".to_string(), - "radixSortMSD".to_string(), - "radixSortLSD".to_string() - ] } - } - pub async fn run(length:usize, delay:f32, functionName:String){ - let mut list:GuiVec = SortingList::new(length, delay).await; - list.randomize(); - - - match functionName.as_str() { - "insertSort" => insertSort::insertSort(&mut list).await, - "bubbleSort" => bubbleSort::bubbleSort(&mut list).await, - "bogoSort" => bogoSort::bogoSort(&mut list).await, - "cocktailShaker" => coctailShaker::cocktailShaker(&mut list).await, - "binaryHeap" => binaryHeap::binaryHeap(&mut list).await, - "quickSort" => quickSort::quickSort(&mut list).await, - "radixSortMSD" => radixSort::radixSort(&mut list).await, - "radixSortLSD" => radixSortLSD::radixSort(&mut list).await, - _ => panic!("No algorithm with that name implemented!") - } - - - - if !list.done{ - list.show().await - } - } - - pub fn getAlgorithms(&self) -> &Vec{ - &self.algorithms - } - - -} - diff --git a/src/assets/LDF-ComicSans/LDFComicSans.ttf b/src/assets/LDF-ComicSans/LDFComicSans.ttf new file mode 100644 index 0000000000000000000000000000000000000000..38b3abf939e0b51ed2699a35c774acb258560e30 GIT binary patch literal 18892 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 literal 0 HcmV?d00001 diff --git a/src/insertSortGenerator.rs b/src/insertSortGenerator.rs new file mode 100644 index 0000000..a14fd75 --- /dev/null +++ b/src/insertSortGenerator.rs @@ -0,0 +1,37 @@ +use std::cell::RefCell; +use std::rc::Rc; + +use futures_core::stream::Stream; +use futures_util::pin_mut; +use futures_util::stream::StreamExt; + +pub fn insert_sort( + mut list: Vec, +) -> impl std::ops::Generator>>, Return = ()> { + let list2 = Rc::new(RefCell::new(list)); + let len = list2.borrow().len() - 1; + move || { + for index in 0..len { + let mut j = index; + while j > 0 && list2.borrow()[j] < list2.borrow()[j+1] { + { + list2.borrow_mut().swap(j, j-1); + } + yield list2.clone(); + j -= 1; + } + } + } +} + +pub fn test( + mut list: Vec, +) -> impl std::ops::Generator>>, Return = ()> { + let list2 = Rc::new(RefCell::new(list)); + let len = list2.borrow().len(); + move || { + for index in 0..len { + yield list2.clone(); + } + } +} diff --git a/src/main.rs b/src/main.rs index 6fcf9c1..cbd63a8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,40 +1,82 @@ +#![feature(generators, generator_trait)] mod BarPlugin; -mod GuiHookVec; -mod algorithm; mod dropdown; -use std::f32::consts::PI; -use std::fs::File; -use std::path::Path; -use dropdown::ButtonDropDown; +use std::cell::RefCell; +use std::ops::{Generator, GeneratorState}; +use std::pin::Pin; +use std::rc::Rc; use anyhow::Result; +use insertSortGenerator::{insert_sort, test}; use notan::draw::*; +use notan::draw::{CreateDraw, CreateFont, DrawConfig, Font}; use notan::prelude::*; -use tokio::runtime::Runtime; -use tokio::time::{sleep, Duration}; +mod insertSortGenerator; +#[derive(AppState)] +struct State { + gen: Box>>, Return = ()>>, + delay: f32, + lastStepTime: f32, + font: Font, + next: Option, + finished: bool, +} + +fn setup(gfx: &mut Graphics) -> State { + let mut arr = (1..=100).collect::>(); + let gen = insert_sort(arr); + State { + gen: Box::new(gen), + delay: 1., + lastStepTime: 1., + font: gfx + .create_font(include_bytes!("./assets/LDF-ComicSans/LDFComicSans.ttf")) + .unwrap(), + next: None, + finished: false, + } +} + #[notan_main] fn main() -> Result<(), String> { - notan::init().draw(draw).add_config(DrawConfig).build() + notan::init_with(setup) + .update(update) + .draw(draw) + .add_config(DrawConfig) + .build() +} +fn update(state: &mut State) { + if !state.finished { + match Pin::new(&mut state.gen).resume(()) { + GeneratorState::Yielded(a) => { + state.next = Some(format!("{:?}", a)); + println!("We set something") + } + GeneratorState::Complete(_) => { + state.finished = true; + println!("Generator finished"); + } + } + }; } -fn draw(gfx: &mut Graphics) { - let _ = run(gfx); -} +fn draw(gfx: &mut Graphics, state: &mut State) { + let mut draw = gfx.create_draw(); -fn run(gfx: &mut Graphics) -> Result<()> { - let mut rt = Runtime::new()?; - rt.block_on(async { - let mut draw = gfx.create_draw(); - draw.clear(Color::BLACK); - draw.triangle((400.0, 100.0), (100.0, 500.0), (700.0, 500.0)); - gfx.render(&draw); - println!("Before sleep"); - sleep(Duration::from_millis(10000)).await; - println!("After sleep"); - draw.clear(Color::BLACK); - draw.rect((400., 100.), (100., 100.)); - gfx.render(&draw); - }); - Ok(()) + draw.clear(Color::BLACK); + + let text = if state.next.is_some() { + state.next.clone().unwrap() + } else { + String::new() + }; + draw.text(&state.font, &text) + .position(100., 100.) + .size(60.) + .color(Color::WHITE) + .h_align_center() + .v_align_middle(); + + gfx.render(&draw); }