From 6188e4d040c14d221aebebb942d424edada47671 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Mon, 9 Jan 2017 20:26:19 -0700 Subject: [PATCH] Remove event --- src/event.rs | 81 ---------------------------------------------------- src/lib.rs | 7 ----- 2 files changed, 88 deletions(-) delete mode 100644 src/event.rs diff --git a/src/event.rs b/src/event.rs deleted file mode 100644 index f22f3fe..0000000 --- a/src/event.rs +++ /dev/null @@ -1,81 +0,0 @@ -use collections::{BTreeMap, Vec}; -use collections::boxed::Box; - -use ::Result; - -pub struct EventQueue { - /// The file to read events from - file: usize, - /// A map of registered file descriptors to their handler callbacks - callbacks: BTreeMap Result>>> -} - -impl EventQueue { - /// Create a new event queue - pub fn new() -> Result> { - Ok(EventQueue { - file: ::open("event:", ::O_RDONLY)?, - callbacks: BTreeMap::new() - }) - } - - /// Add a file to the event queue, calling a callback when an event occurs - /// - /// The callback is given a mutable reference to the file and the event data - /// (typically the length of data available for read) - /// - /// The callback returns Ok(None) if it wishes to continue the event loop, - /// or Ok(Some(R)) to break the event loop and return the value. - /// Err can be used to allow the callback to return an I/O error, and break the - /// event loop - pub fn add Result> + 'static>(&mut self, fd: usize, callback: F) -> Result<()> { - ::fevent(fd, ::EVENT_READ)?; - - self.callbacks.insert(fd, Box::new(callback)); - - Ok(()) - } - - /// Remove a file from the event queue, returning its callback if found - pub fn remove(&mut self, fd: usize) -> Result Result>>>> { - if let Some(callback) = self.callbacks.remove(&fd) { - ::fevent(fd, 0)?; - - Ok(Some(callback)) - } else { - Ok(None) - } - } - - /// Send an event to a descriptor callback - pub fn trigger(&mut self, fd: usize, count: usize) -> Result> { - if let Some(callback) = self.callbacks.get_mut(&fd) { - callback(count) - } else { - Ok(None) - } - } - - /// Send an event to all descriptor callbacks, useful for cleaning out buffers after init - pub fn trigger_all(&mut self, count: usize) -> Result> { - let mut rets = Vec::new(); - for (_fd, callback) in self.callbacks.iter_mut() { - if let Some(ret) = callback(count)? { - rets.push(ret); - } - } - Ok(rets) - } - - /// Process the event queue until a callback returns Some(R) - pub fn run(&mut self) -> Result { - loop { - let mut event = ::Event::default(); - if ::read(self.file, &mut event)? > 0 { - if let Some(ret) = self.trigger(event.id, event.data)? { - return Ok(ret); - } - } - } - } -} diff --git a/src/lib.rs b/src/lib.rs index 1006522..d7b96ed 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,17 +1,13 @@ #![deny(warnings)] #![feature(asm)] -#![feature(collections)] #![feature(const_fn)] #![feature(core_intrinsics)] #![no_std] -extern crate collections; - pub use self::arch::*; pub use self::call::*; pub use self::data::*; pub use self::error::*; -pub use self::event::*; pub use self::flag::*; pub use self::io::*; pub use self::number::*; @@ -38,9 +34,6 @@ pub mod data; /// All errors that can be generated by a system call pub mod error; -/// Event queue -pub mod event; - /// Flags used as an argument to many system calls pub mod flag;