From 9e77a839d32ee810503c0a0b4c8e2d3cf6f16743 Mon Sep 17 00:00:00 2001 From: Matthew Piziak Date: Mon, 8 Aug 2016 17:52:24 -0400 Subject: [PATCH] remove clone from `into_iter` --- saphyr/src/yaml.rs | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/saphyr/src/yaml.rs b/saphyr/src/yaml.rs index 96b4cc4..e5af16f 100644 --- a/saphyr/src/yaml.rs +++ b/saphyr/src/yaml.rs @@ -234,7 +234,7 @@ pub fn $name(self) -> Option<$t> { } } ); -); +); impl Yaml { define_as!(as_bool, bool, Boolean); @@ -245,7 +245,7 @@ impl Yaml { define_as_ref!(as_vec, &Array, Array); define_into!(into_bool, bool, Boolean); - define_into!(into_i64, i64, Integer); + define_into!(into_i64, i64, Integer); define_into!(into_string, String, String); define_into!(into_hash, Hash, Hash); define_into!(into_vec, Array, Array); @@ -344,22 +344,21 @@ impl IntoIterator for Yaml { type IntoIter = YamlIter; fn into_iter(self) -> Self::IntoIter { - YamlIter {yaml: self, index: 0} + let mut yaml = self.into_vec().unwrap_or(vec![]); + yaml.reverse(); + YamlIter {yaml: yaml} } } pub struct YamlIter { - yaml: Yaml, - index: usize, + yaml: Vec, } impl Iterator for YamlIter { type Item = Yaml; fn next(&mut self) -> Option { - let result = self.yaml[self.index].clone(); - self.index += 1; - Some(result) + self.yaml.pop() } } @@ -540,7 +539,7 @@ a1: &DEFAULT assert!(YamlLoader::load_from_str("---This used to cause an infinite loop").is_ok()); assert_eq!(YamlLoader::load_from_str("----"), Ok(vec![Yaml::String(String::from("----"))])); assert_eq!(YamlLoader::load_from_str("--- #here goes a comment"), Ok(vec![Yaml::Null])); - assert_eq!(YamlLoader::load_from_str("---- #here goes a comment"), Ok(vec![Yaml::String(String::from("----"))])); + assert_eq!(YamlLoader::load_from_str("---- #here goes a comment"), Ok(vec![Yaml::String(String::from("----"))])); } #[test] @@ -561,13 +560,13 @@ a1: &DEFAULT - !!float 2 - !!bool true - !!bool false -- 0xFF +- 0xFF - 0o77 - +12345 "; - let mut out = YamlLoader::load_from_str(&s).unwrap().into_iter(); + let mut out = YamlLoader::load_from_str(&s).unwrap().into_iter(); let mut doc = out.next().unwrap().into_iter(); - + assert_eq!(doc.next().unwrap().into_string().unwrap(), "string"); assert_eq!(doc.next().unwrap().into_string().unwrap(), "string"); assert_eq!(doc.next().unwrap().into_string().unwrap(), "string"); @@ -583,7 +582,7 @@ a1: &DEFAULT assert_eq!(doc.next().unwrap().into_bool().unwrap(), true); assert_eq!(doc.next().unwrap().into_bool().unwrap(), false); assert_eq!(doc.next().unwrap().into_i64().unwrap(), 255); - assert_eq!(doc.next().unwrap().into_i64().unwrap(), 63); - assert_eq!(doc.next().unwrap().into_i64().unwrap(), 12345); + assert_eq!(doc.next().unwrap().into_i64().unwrap(), 63); + assert_eq!(doc.next().unwrap().into_i64().unwrap(), 12345); } }