From 6a545f4abb179512fa7d297b46b134d2ea5470e1 Mon Sep 17 00:00:00 2001 From: messense Date: Mon, 31 Jul 2017 22:33:28 +0800 Subject: [PATCH] Less allocation in extract_sequence --- src/objects/sequence.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/objects/sequence.rs b/src/objects/sequence.rs index dfe35936..e6ff182d 100644 --- a/src/objects/sequence.rs +++ b/src/objects/sequence.rs @@ -118,7 +118,7 @@ impl PySequence { /// Python statement `del o[i]` #[inline] pub fn del_item(&self, i: isize) -> PyResult<()> { - unsafe { + unsafe { err::error_on_minusone( self.py(), ffi::PySequence_DelItem(self.as_ptr(), i as Py_ssize_t)) } @@ -139,7 +139,7 @@ impl PySequence { /// equivalent of the Python statement `del o[i1:i2]` #[inline] pub fn del_slice(&self, i1: isize, i2: isize) -> PyResult<()> { - unsafe { + unsafe { err::error_on_minusone( self.py(), ffi::PySequence_DelSlice(self.as_ptr(), i1 as Py_ssize_t, i2 as Py_ssize_t)) @@ -237,10 +237,10 @@ impl <'source, T> FromPyObject<'source> for Vec fn extract_sequence<'s, T>(obj: &'s PyObjectRef) -> PyResult> where T: FromPyObject<'s> { let seq = PySequence::try_from(obj)?; - let mut v = Vec::new(); - for item in try!(seq.iter()) { + let mut v = Vec::with_capacity(seq.len().unwrap_or(0) as usize); + for item in seq.iter()? { let item = try!(item); - v.push(try!(item.extract::())); + v.push(item.extract::()?); } Ok(v) } @@ -578,7 +578,7 @@ mod test { let v: Vec = py.eval("range(1, 5)", None, None).unwrap().extract().unwrap(); assert!(v == [1, 2, 3, 4]); } - + #[test] fn test_extract_bytearray_to_vec() { let gil = Python::acquire_gil();