Provide a publicly-accessible Core ID

Allow distinguishing between multiple `Core`s and associating data with
them through a `HashMap` or similar.
This commit is contained in:
Michal 'vorner' Vaner 2017-01-15 15:15:37 +01:00
parent d0833074d6
commit 8d02a1c2b6
No known key found for this signature in database
GPG Key ID: F700D0C019E4C66F

View File

@ -76,6 +76,15 @@ struct Inner {
timeouts: Slab<(Option<Slot>, 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 {