From 73e7394e32720bb87300d565ee3f52e31ddfc41e Mon Sep 17 00:00:00 2001 From: Ben Bridle Date: Sat, 5 Oct 2024 09:20:50 +1300 Subject: Update version to 1.0.0 --- .gitignore | 2 ++ Cargo.toml | 9 +++++++++ src/lib.rs | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 61 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.toml create mode 100644 src/lib.rs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4fffb2f --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/target +/Cargo.lock diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..ac30292 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "event_queue" +version = "1.0.0" +authors = ["Ben Bridle"] +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..5700c59 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,50 @@ +use std::collections::VecDeque; + + +pub struct EventQueue { + queue: VecDeque, +} + +impl EventQueue { + pub const fn new() -> Self { + Self { queue: VecDeque::new() } + } + + pub fn read(&mut self) -> Option { + self.queue.pop_front() + } + + pub fn write(&mut self, event: E) { + self.queue.push_back(event); + } + + pub fn as_reader(&mut self) -> EventReader { + EventReader { queue: &mut self.queue } + } + + pub fn as_writer(&mut self) -> EventWriter { + EventWriter { queue: &mut self.queue } + } +} + + +pub struct EventReader<'q, E> { + queue: &'q mut VecDeque, +} + +impl EventReader<'_, E> { + pub fn read(&mut self) -> Option { + self.queue.pop_front() + } +} + + +pub struct EventWriter<'q, E> { + queue: &'q mut VecDeque, +} + +impl EventWriter<'_, E> { + pub fn write(&mut self, event: E) { + self.queue.push_front(event) + } +} -- cgit v1.2.3-70-g09d2