bump slab to 0.4.0

Makes some of the code easier to read.
This commit is contained in:
Travis Bischel
2017-09-07 20:53:54 -07:00
parent 04eba12d43
commit fce59de79e
3 changed files with 23 additions and 20 deletions
+1 -1
View File
@@ -21,7 +21,7 @@ bytes = "0.4"
log = "0.3" log = "0.3"
mio = "0.6.10" mio = "0.6.10"
scoped-tls = "0.1.0" scoped-tls = "0.1.0"
slab = "0.3" slab = "0.4"
iovec = "0.1" iovec = "0.1"
tokio-io = "0.1" tokio-io = "0.1"
futures = "0.1.15" futures = "0.1.15"
+3 -3
View File
@@ -42,10 +42,10 @@ impl<T: Ord> Heap<T> {
pub fn push(&mut self, t: T) -> Slot { pub fn push(&mut self, t: T) -> Slot {
self.assert_consistent(); self.assert_consistent();
let len = self.items.len(); let len = self.items.len();
if self.index.available() == 0 { if self.index.len() == self.index.capacity() {
self.index.reserve_exact(len); self.index.reserve_exact(len);
} }
let slot_idx = self.index.insert(len).unwrap(); let slot_idx = self.index.insert(len);
self.items.push((t, slot_idx)); self.items.push((t, slot_idx));
self.percolate_up(len); self.percolate_up(len);
self.assert_consistent(); self.assert_consistent();
@@ -68,7 +68,7 @@ impl<T: Ord> Heap<T> {
pub fn remove(&mut self, slot: Slot) -> T { pub fn remove(&mut self, slot: Slot) -> T {
self.assert_consistent(); self.assert_consistent();
let idx = self.index.remove(slot.idx).unwrap(); let idx = self.index.remove(slot.idx);
let (item, slot_idx) = self.items.swap_remove(idx); let (item, slot_idx) = self.items.swap_remove(idx);
debug_assert_eq!(slot.idx, slot_idx); debug_assert_eq!(slot.idx, slot_idx);
if idx < self.items.len() { if idx < self.items.len() {
+19 -16
View File
@@ -365,7 +365,7 @@ impl Core {
} }
Ok(Async::Ready(())) | Ok(Async::Ready(())) |
Err(()) => { Err(()) => {
_task_to_drop = inner.task_dispatch.remove(token).unwrap(); _task_to_drop = inner.task_dispatch.remove(token);
} }
} }
drop(inner); drop(inner);
@@ -469,18 +469,20 @@ impl Inner {
reader: None, reader: None,
writer: None, writer: None,
}; };
if self.io_dispatch.vacant_entry().is_none() { if self.io_dispatch.len() == self.io_dispatch.capacity() {
let amt = self.io_dispatch.len(); let amt = self.io_dispatch.len();
self.io_dispatch.reserve_exact(amt); self.io_dispatch.reserve_exact(amt);
} }
let entry = self.io_dispatch.vacant_entry().unwrap(); let entry = self.io_dispatch.vacant_entry();
let key = entry.key();
try!(self.io.register(source, try!(self.io.register(source,
mio::Token(TOKEN_START + entry.index() * 2), mio::Token(TOKEN_START + key * 2),
mio::Ready::readable() | mio::Ready::readable() |
mio::Ready::writable() | mio::Ready::writable() |
platform::all(), platform::all(),
mio::PollOpt::edge())); mio::PollOpt::edge()));
Ok((sched.readiness.clone(), entry.insert(sched).index())) let sched = entry.insert(sched);
Ok((sched.readiness.clone(), key))
} }
fn deregister_source(&mut self, source: &Evented) -> io::Result<()> { fn deregister_source(&mut self, source: &Evented) -> io::Result<()> {
@@ -489,7 +491,7 @@ impl Inner {
fn drop_source(&mut self, token: usize) { fn drop_source(&mut self, token: usize) {
debug!("dropping I/O source: {}", token); debug!("dropping I/O source: {}", token);
self.io_dispatch.remove(token).unwrap(); self.io_dispatch.remove(token);
} }
fn schedule(&mut self, token: usize, wake: Task, dir: Direction) fn schedule(&mut self, token: usize, wake: Task, dir: Direction)
@@ -512,15 +514,16 @@ impl Inner {
} }
fn add_timeout(&mut self, at: Instant) -> usize { fn add_timeout(&mut self, at: Instant) -> usize {
if self.timeouts.vacant_entry().is_none() { if self.timeouts.len() == self.timeouts.capacity() {
let len = self.timeouts.len(); let len = self.timeouts.len();
self.timeouts.reserve_exact(len); self.timeouts.reserve_exact(len);
} }
let entry = self.timeouts.vacant_entry().unwrap(); let entry = self.timeouts.vacant_entry();
let slot = self.timer_heap.push((at, entry.index())); let key = entry.key();
let entry = entry.insert((Some(slot), TimeoutState::NotFired)); let slot = self.timer_heap.push((at, key));
debug!("added a timeout: {}", entry.index()); entry.insert((Some(slot), TimeoutState::NotFired));
return entry.index(); debug!("added a timeout: {}", key);
return key;
} }
fn update_timeout(&mut self, token: usize, handle: Task) -> Option<Task> { fn update_timeout(&mut self, token: usize, handle: Task) -> Option<Task> {
@@ -544,18 +547,18 @@ impl Inner {
fn cancel_timeout(&mut self, token: usize) { fn cancel_timeout(&mut self, token: usize) {
debug!("cancel a timeout: {}", token); debug!("cancel a timeout: {}", token);
let pair = self.timeouts.remove(token); let pair = self.timeouts.remove(token);
if let Some((Some(slot), _state)) = pair { if let (Some(slot), _state) = pair {
self.timer_heap.remove(slot); self.timer_heap.remove(slot);
} }
} }
fn spawn(&mut self, future: Box<Future<Item=(), Error=()>>) { fn spawn(&mut self, future: Box<Future<Item=(), Error=()>>) {
if self.task_dispatch.vacant_entry().is_none() { if self.task_dispatch.len() == self.task_dispatch.capacity() {
let len = self.task_dispatch.len(); let len = self.task_dispatch.len();
self.task_dispatch.reserve_exact(len); self.task_dispatch.reserve_exact(len);
} }
let entry = self.task_dispatch.vacant_entry().unwrap(); let entry = self.task_dispatch.vacant_entry();
let token = TOKEN_START + 2 * entry.index() + 1; let token = TOKEN_START + 2 * entry.key() + 1;
let pair = mio::Registration::new2(); let pair = mio::Registration::new2();
self.io.register(&pair.0, self.io.register(&pair.0,
mio::Token(token), mio::Token(token),