Skip to content

Commit

Permalink
Add Stack::pop
Browse files Browse the repository at this point in the history
  • Loading branch information
sfackler committed Nov 5, 2016
1 parent 52feaae commit ed69d6b
Showing 1 changed file with 13 additions and 12 deletions.
25 changes: 13 additions & 12 deletions openssl/src/stack.rs
Original file line number Diff line number Diff line change
Expand Up @@ -40,18 +40,7 @@ impl<T: Stackable> Stack<T> {
impl<T: Stackable> Drop for Stack<T> {
fn drop(&mut self) {
unsafe {
loop {
let ptr = OPENSSL_sk_pop(self.as_stack());

if ptr.is_null() {
break;
}

// Build the owned version of the object just to run
// its `drop` implementation and delete the item.
T::from_ptr(ptr as *mut _);
}

while let Some(_) = self.pop() {}
OPENSSL_sk_free(self.0 as *mut _);
}
}
Expand Down Expand Up @@ -209,6 +198,18 @@ impl<T: Stackable> StackRef<T> {
}
}

/// Removes the last element from the stack and returns it.
pub fn pop(&mut self) -> Option<T> {
unsafe {
let ptr = OPENSSL_sk_pop(self.as_stack());
if ptr.is_null() {
None
} else {
Some(T::from_ptr(ptr as *mut _))
}
}
}

unsafe fn _get(&self, idx: usize) -> *mut T::CType {
OPENSSL_sk_value(self.as_stack(), idx as c_int) as *mut _
}
Expand Down

0 comments on commit ed69d6b

Please sign in to comment.