From 8d02a1c2b6d4c1cb9908bed48067dd7634c31894 Mon Sep 17 00:00:00 2001 From: Michal 'vorner' Vaner Date: Sun, 15 Jan 2017 15:15:37 +0100 Subject: [PATCH] Provide a publicly-accessible Core ID Allow distinguishing between multiple `Core`s and associating data with them through a `HashMap` or similar. --- src/reactor/mod.rs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/reactor/mod.rs b/src/reactor/mod.rs index 117207526..424e4d881 100644 --- a/src/reactor/mod.rs +++ b/src/reactor/mod.rs @@ -76,6 +76,15 @@ struct Inner { timeouts: Slab<(Option, TimeoutState)>, } +/// An unique ID for a Core +/// +/// An ID by which different cores may be distinguished. Can be compared and used as an index in +/// a `HashMap`. +/// +/// The ID is globally unique and never reused. +#[derive(Clone,Copy,Eq,PartialEq,Hash,Debug)] +pub struct CoreId(usize); + /// Handle to an event loop, used to construct I/O objects, send messages, and /// otherwise interact indirectly with the event loop itself. /// @@ -420,6 +429,11 @@ impl Core { Message::Run(r) => r.call_box(self), } } + + /// Get the ID of this loop + pub fn id(&self) -> CoreId { + CoreId(self.inner.borrow().id) + } } impl Inner { @@ -589,6 +603,11 @@ impl Remote { lp.inner.borrow_mut().spawn(Box::new(f.into_future())); }))); } + + /// Return the ID of the represented Core + pub fn id(&self) -> CoreId { + CoreId(self.id) + } } impl Handle { @@ -620,6 +639,11 @@ impl Handle { { self.spawn(futures::lazy(f)) } + + /// Return the ID of the represented Core + pub fn id(&self) -> CoreId { + self.remote.id() + } } impl TimeoutState {