diff --git a/src/consumer.rs b/src/consumer.rs index 5c0e79d46..e07aba71a 100644 --- a/src/consumer.rs +++ b/src/consumer.rs @@ -8,7 +8,6 @@ //! This consumer will take 4 samples from the input, print them, then stop //! //! ```rust -//! #![feature(io)] //! use nom::{IResult,Needed,MemProducer,Consumer,ConsumerState}; //! use std::str; //! use std::io::SeekFrom; @@ -113,7 +112,7 @@ pub trait Consumer { let mut tmp = Vec::new(); //println!("before:\n{}", acc.to_hex(16)); //println!("after:\n{}", (&acc[consumed..acc.len()]).to_hex(16)); - tmp.push_all(&acc[consumed..acc.len()]); + tmp.extend(acc[consumed..acc.len()].iter().cloned()); acc.clear(); acc = tmp; } else { @@ -124,7 +123,7 @@ pub trait Consumer { acc.clear(); } else { let mut tmp = Vec::new(); - tmp.push_all(&acc[consumed..acc.len()]); + tmp.extend(acc[consumed..acc.len()].iter().cloned()); acc.clear(); acc = tmp; } @@ -134,7 +133,7 @@ pub trait Consumer { match state { Data(v) => { //println!("got data: {} bytes", v.len()); - acc.push_all(v); + acc.extend(v.iter().cloned()); position = position + v.len(); }, Eof(v) => { @@ -146,7 +145,7 @@ pub trait Consumer { } else { //println!("eof with {} bytes", v.len()); eof = true; - acc.push_all(v); + acc.extend(v.iter().cloned()); position = position + v.len(); break; } diff --git a/src/lib.rs b/src/lib.rs index 9051c844e..919607331 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -34,8 +34,6 @@ //! ``` //! -#![feature(collections)] - pub use self::util::*; pub use self::internal::*;//{IResult, IResultClosure, GetInput, GetOutput}; pub use self::map::*; diff --git a/src/macros.rs b/src/macros.rs index 17b359baa..146e07a5f 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -1,5 +1,3 @@ -extern crate collections; - #[macro_export] macro_rules! closure ( ($ty:ty, $submac:ident!( $($args:tt)* )) => ( diff --git a/src/nom.rs b/src/nom.rs index 1100877f1..f6796d49c 100644 --- a/src/nom.rs +++ b/src/nom.rs @@ -6,8 +6,6 @@ //! but the macros system makes no promises. //! -extern crate collections; - use std::fmt::Debug; use internal::*; use internal::IResult::*; diff --git a/src/producer.rs b/src/producer.rs index c0f7a27b3..d412c4dce 100644 --- a/src/producer.rs +++ b/src/producer.rs @@ -34,6 +34,7 @@ use std::fs::File; use std::path::Path; use std::io; use std::io::{Read,Seek,SeekFrom}; +use std::iter::repeat; /// Holds the data producer's current state /// @@ -78,9 +79,10 @@ impl FileProducer { impl Producer for FileProducer { fn produce(&mut self) -> ProducerState<&[u8]> { + let len = self.v.len(); //let mut v = Vec::with_capacity(self.size); //self.v.clear(); - self.v.resize(self.size, 0); + self.v.extend(repeat(0).take(self.size - len)); match self.file.read(&mut self.v) { Err(e) => { //println!("producer error: {:?}", e); @@ -217,7 +219,7 @@ macro_rules! pusher ( match state { ProducerState::Data(v) => { //println!("got data"); - acc.push_all(v) + acc.extend(v.iter().cloned()) }, ProducerState::Eof(v) => { if v.is_empty() { @@ -225,13 +227,13 @@ macro_rules! pusher ( break; } else { //println!("eof with {} bytes", v.len()); - acc.push_all(v) + acc.extend(v.iter().cloned()) } } _ => {break;} } let mut v2: Vec = Vec::new(); - v2.push_all(&acc[..]); + v2.extend(acc[..].iter().cloned()); //let p = IResult::Done(b"", v2.as_slice()); match $f(&v2[..]) { IResult::Error(e) => { @@ -244,7 +246,7 @@ macro_rules! pusher ( IResult::Done(i, _) => { //println!("data, done"); acc.clear(); - acc.push_all(i); + acc.extend(i.iter().cloned()); } } } diff --git a/tests/mp4.rs b/tests/mp4.rs index c42425fe8..fe3649f6a 100644 --- a/tests/mp4.rs +++ b/tests/mp4.rs @@ -1,4 +1,3 @@ -#![feature(log_syntax,trace_macros)] #![allow(dead_code)] #[macro_use] diff --git a/tests/test1.rs b/tests/test1.rs index a04bc98ed..ddddc6fe2 100644 --- a/tests/test1.rs +++ b/tests/test1.rs @@ -1,5 +1,3 @@ -#![feature(collections,slice_patterns)] - #[macro_use] extern crate nom;