summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rw-r--r--Cargo.toml9
-rw-r--r--src/lib.rs50
3 files changed, 61 insertions, 0 deletions
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<E> {
+ queue: VecDeque<E>,
+}
+
+impl<E> EventQueue<E> {
+ pub const fn new() -> Self {
+ Self { queue: VecDeque::new() }
+ }
+
+ pub fn read(&mut self) -> Option<E> {
+ self.queue.pop_front()
+ }
+
+ pub fn write(&mut self, event: E) {
+ self.queue.push_back(event);
+ }
+
+ pub fn as_reader(&mut self) -> EventReader<E> {
+ EventReader { queue: &mut self.queue }
+ }
+
+ pub fn as_writer(&mut self) -> EventWriter<E> {
+ EventWriter { queue: &mut self.queue }
+ }
+}
+
+
+pub struct EventReader<'q, E> {
+ queue: &'q mut VecDeque<E>,
+}
+
+impl<E> EventReader<'_, E> {
+ pub fn read(&mut self) -> Option<E> {
+ self.queue.pop_front()
+ }
+}
+
+
+pub struct EventWriter<'q, E> {
+ queue: &'q mut VecDeque<E>,
+}
+
+impl<E> EventWriter<'_, E> {
+ pub fn write(&mut self, event: E) {
+ self.queue.push_front(event)
+ }
+}