deque: avoid Copy in pop_{front,back}
This commit is contained in:
parent
373c072e83
commit
6190661018
@ -45,6 +45,23 @@ impl<T> Deque<T> {
|
||||
|
||||
fn peek_front(&self) -> &self/T { get(self.elts, self.lo) }
|
||||
fn peek_back(&self) -> &self/T { get(self.elts, self.hi - 1u) }
|
||||
|
||||
fn pop_front(&mut self) -> T {
|
||||
let mut result = self.elts[self.lo].swap_unwrap();
|
||||
self.lo = (self.lo + 1u) % self.elts.len();
|
||||
self.nelts -= 1u;
|
||||
result
|
||||
}
|
||||
|
||||
fn pop_back(&mut self) -> T {
|
||||
if self.hi == 0u {
|
||||
self.hi = self.elts.len() - 1u;
|
||||
} else { self.hi -= 1u; }
|
||||
let mut result = self.elts[self.hi].swap_unwrap();
|
||||
self.elts[self.hi] = None;
|
||||
self.nelts -= 1u;
|
||||
result
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: Copy> Deque<T> {
|
||||
@ -73,24 +90,6 @@ impl<T: Copy> Deque<T> {
|
||||
self.nelts += 1u;
|
||||
}
|
||||
|
||||
fn pop_front(&mut self) -> T {
|
||||
let t = { *get(self.elts, self.lo) };
|
||||
self.elts[self.lo] = None;
|
||||
self.lo = (self.lo + 1u) % self.elts.len();
|
||||
self.nelts -= 1u;
|
||||
t
|
||||
}
|
||||
|
||||
fn pop_back(&mut self) -> T {
|
||||
if self.hi == 0u {
|
||||
self.hi = self.elts.len() - 1u;
|
||||
} else { self.hi -= 1u; }
|
||||
let t = { *get(self.elts, self.hi) };
|
||||
self.elts[self.hi] = None;
|
||||
self.nelts -= 1u;
|
||||
t
|
||||
}
|
||||
|
||||
fn get(&self, i: int) -> T {
|
||||
let idx = (self.lo + (i as uint)) % self.elts.len();
|
||||
*get(self.elts, idx)
|
||||
|
Loading…
x
Reference in New Issue
Block a user