summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBen Bridle <bridle.benjamin@gmail.com>2024-10-05 09:20:50 +1300
committerBen Bridle <bridle.benjamin@gmail.com>2024-10-05 09:20:50 +1300
commit73e7394e32720bb87300d565ee3f52e31ddfc41e (patch)
tree2583f22985d6c7acc96d985a5507be4993b93401 /src
downloadevent-queue-94c49dea3aba74be2828e15a800bc959f35b6d3a.zip
Update version to 1.0.0v1.0.0
Diffstat (limited to 'src')
-rw-r--r--src/lib.rs50
1 files changed, 50 insertions, 0 deletions
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)
+ }
+}