aboutsummaryrefslogtreecommitdiffstats
path: root/src/binary/reader.rs
diff options
context:
space:
mode:
authorEdward Barnard2015-09-23 22:38:33 +0100
committerEdward Barnard2015-09-23 22:38:33 +0100
commit3964f2a14cba647f6e69d70b3c3cf57a2527e5a5 (patch)
treeb24db9a99fe8522649e96a24064783d900998195 /src/binary/reader.rs
parent020c5b92a190c4942173f553912b96bd07589271 (diff)
downloadrust-plist-3964f2a14cba647f6e69d70b3c3cf57a2527e5a5.tar.bz2
Remove dependency on itertools
Diffstat (limited to 'src/binary/reader.rs')
-rw-r--r--src/binary/reader.rs15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/binary/reader.rs b/src/binary/reader.rs
index a8d146e..75c7535 100644
--- a/src/binary/reader.rs
+++ b/src/binary/reader.rs
@@ -1,7 +1,6 @@
use byteorder::{BigEndian, ReadBytesExt};
use byteorder::Error as ByteorderError;
use chrono::{TimeZone, UTC};
-use itertools::Interleave;
use std::io::{Cursor, Read, Seek, SeekFrom};
use std::string::FromUtf16Error;
@@ -235,16 +234,22 @@ impl<R: Read+Seek> StreamingParser<R> {
let key_refs = try!(self.read_refs(len));
let value_refs = try!(self.read_refs(len));
- let mut object_refs: Vec<_> = Interleave::new(key_refs.into_iter(), value_refs.into_iter()).collect();
- // Reverse so we can pop off the end of the stack in order
- object_refs.reverse();
+ let len = len as usize;
+
+ let mut object_refs = Vec::with_capacity(len * 2);
+
+ for i in 1..len+1 {
+ // Reverse so we can pop off the end of the stack in order
+ object_refs.push(value_refs[len - i]);
+ object_refs.push(key_refs[len - i]);
+ }
self.stack.push(StackItem {
ty: StackType::Dict,
object_refs: object_refs
});
- Some(PlistEvent::StartDictionary(Some(len)))
+ Some(PlistEvent::StartDictionary(Some(len as u64)))
},
(_, _) => return Err(ParserError::InvalidData)
};