Repository navigation
Expand file tree
/
Copy pathQueue.rs
More file actions
95 lines (71 loc) · 2.57 KB
/
Copy pathQueue.rs
File metadata and controls
95 lines (71 loc) · 2.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#![no_std]
#![no_main]
use core::usize;
use alloc::string::String;
use alloc::vec;
use defmt::info;
use embassy_executor::Spawner;
use embassy_time::{Duration, Timer};
use embedded_graphics::image::Image;
use esp_hal::clock::CpuClock;
use heapless::Deque;
use esp_hal::timer::timg::TimerGroup;
use esp_println::{self as _, print};
use heapless::Vec;
#[panic_handler]
fn panic(_: &core::panic::PanicInfo) -> ! {
loop {}
}
extern crate alloc;
struct QUEQ{
quequ: Deque<&'static str, 160>,
}
impl QUEQ{
pub async fn find_value(&mut self, value : &str) ->bool{
self.quequ.iter().any(|&item| item == value)
}
pub async fn find_value_position(&mut self,value:&str) -> Option<(usize,&'static str)> {
self.quequ.iter().enumerate().find(|(_, &item) | item == value).map(|(idx,&item) | (idx,item))
}
}
#[esp_hal_embassy::main]
async fn main(spawner: Spawner) {
let config = esp_hal::Config::default().with_cpu_clock(CpuClock::max());
let mut peripherals = esp_hal::init(config);
esp_alloc::heap_allocator!(size: 64 * 1024);
let timer0 = TimerGroup::new(peripherals.TIMG1);
esp_hal_embassy::init(timer0.timer0);
info!("Embassy initialized!");
// Queue = Fifo data structure. First-In First-Out
// A collection designed for holding elements prior to proccesing
// Linear data structure
// add = enque push_back().ok()
// remove = dequeq , pop_front() returns Option<u8>
let mut queue: Deque<&str, 160> = Deque::new();
// inserting elements into the quee
queue.push_back("42").ok();
queue.push_back("42").ok();
queue.push_back("42").ok();
queue.push_back("42").ok();
print!("\n {:?}",queue);
let value = queue.pop_front();
print!("\n value is {:?}",value);
print!("\n que {:?}",queue);
queue.push_front("Bob").ok();
queue.push_front("Bob").ok();
queue.push_front("Bob").ok();
queue.push_front("Bob").ok();
queue.push_front("Waldo").ok();
queue.push_front("Bob").ok();
queue.push_front("Bob").ok();
queue.push_front("BobFront").ok();
print!("\n queue {:?}",queue);
print!("\n WheresWaldo {:?}",find_value_position(queue.clone(), "Waldo").await);
print!("\n queue {:?}",queue);
}
pub async fn find_value(queue : Deque<&'static str, 160>, value : &str) ->bool{
queue.iter().any(|&item| item == value)
}
pub async fn find_value_position(queue : Deque<&'static str, 160>, value : &str)-> Option<(usize,&'static str)> {
queue.iter().enumerate().find(|(_, &item) | item == value).map(|(idx,&item) | (idx,item))
}