From fa8553e41735d94cab81dba68c284d81e3f23107 Mon Sep 17 00:00:00 2001 From: Graydon Hoare Date: Thu, 18 Jul 2013 12:37:40 -0700 Subject: [PATCH] extra: switch json from hashmaps to treemaps --- src/libextra/json.rs | 22 +++++++++++----------- src/libextra/test.rs | 3 +-- src/libextra/workcache.rs | 3 +-- 3 files changed, 13 insertions(+), 15 deletions(-) diff --git a/src/libextra/json.rs b/src/libextra/json.rs index 5602964245f..6a7f0607dd6 100644 --- a/src/libextra/json.rs +++ b/src/libextra/json.rs @@ -41,7 +41,7 @@ pub enum Json { } pub type List = ~[Json]; -pub type Object = HashMap<~str, Json>; +pub type Object = TreeMap<~str, Json>; #[deriving(Eq)] /// If an error occurs while parsing some JSON, this is the structure which is @@ -809,7 +809,7 @@ impl> Parser { self.bump(); self.parse_whitespace(); - let mut values = ~HashMap::new(); + let mut values = ~TreeMap::new(); if self.ch == '}' { self.bump(); @@ -1087,7 +1087,7 @@ impl serialize::Decoder for Decoder { let len = match self.stack.pop() { Object(obj) => { let len = obj.len(); - for obj.consume().advance |(key, value)| { + for obj.consume_iter().advance |(key, value)| { self.stack.push(value); self.stack.push(String(key)); } @@ -1294,9 +1294,9 @@ impl ToJson for ~[A] { fn to_json(&self) -> Json { List(self.map(|elt| elt.to_json())) } } -impl ToJson for HashMap<~str, A> { +impl ToJson for TreeMap<~str, A> { fn to_json(&self) -> Json { - let mut d = HashMap::new(); + let mut d = TreeMap::new(); for self.iter().advance |(key, value)| { d.insert((*key).clone(), value.to_json()); } @@ -1304,9 +1304,9 @@ impl ToJson for HashMap<~str, A> { } } -impl ToJson for TreeMap<~str, A> { +impl ToJson for HashMap<~str, A> { fn to_json(&self) -> Json { - let mut d = HashMap::new(); + let mut d = TreeMap::new(); for self.iter().advance |(key, value)| { d.insert((*key).clone(), value.to_json()); } @@ -1338,11 +1338,11 @@ mod tests { use super::*; - use std::hashmap::HashMap; use std::io; use std::result; - use extra::serialize::Decodable; + use serialize::Decodable; + use treemap::TreeMap; #[deriving(Eq, Encodable, Decodable)] enum Animal { @@ -1363,7 +1363,7 @@ mod tests { } fn mk_object(items: &[(~str, Json)]) -> Json { - let mut d = ~HashMap::new(); + let mut d = ~TreeMap::new(); for items.iter().advance |item| { match *item { @@ -1954,7 +1954,7 @@ mod tests { fn test_decode_map() { let s = ~"{\"a\": \"Dog\", \"b\": [\"Frog\", \"Henry\", 349]}"; let mut decoder = Decoder(from_str(s).unwrap()); - let mut map: HashMap<~str, Animal> = Decodable::decode(&mut decoder); + let mut map: TreeMap<~str, Animal> = Decodable::decode(&mut decoder); assert_eq!(map.pop(&~"a"), Some(Dog)); assert_eq!(map.pop(&~"b"), Some(Frog(~"Henry", 349))); diff --git a/src/libextra/test.rs b/src/libextra/test.rs index 910c95eb8f9..a5705d08b72 100644 --- a/src/libextra/test.rs +++ b/src/libextra/test.rs @@ -38,7 +38,6 @@ use std::task; use std::to_str::ToStr; use std::u64; use std::f64; -use std::hashmap::HashMap; use std::os; @@ -852,7 +851,7 @@ fn calc_result(desc: &TestDesc, task_succeeded: bool) -> TestResult { impl ToJson for Metric { fn to_json(&self) -> json::Json { - let mut map = ~HashMap::new(); + let mut map = ~TreeMap::new(); map.insert(~"value", json::Number(self.value as float)); map.insert(~"noise", json::Number(self.noise as float)); json::Object(map) diff --git a/src/libextra/workcache.rs b/src/libextra/workcache.rs index f7585ca03ba..75b479592ed 100644 --- a/src/libextra/workcache.rs +++ b/src/libextra/workcache.rs @@ -21,7 +21,6 @@ use treemap::TreeMap; use std::cell::Cell; use std::comm::{PortOne, oneshot, send_one, recv_one}; use std::either::{Either, Left, Right}; -use std::hashmap::HashMap; use std::io; use std::result; use std::run; @@ -381,7 +380,7 @@ fn test() { } let cx = Context::new(RWARC(Database::new(Path("db.json"))), - Logger::new(), HashMap::new()); + Logger::new(), TreeMap::new()); let s = do cx.with_prep("test1") |prep| { prep.declare_input("file", pth.to_str(), digest_file(&pth));