extra: switch json from hashmaps to treemaps

This commit is contained in:
Graydon Hoare 2013-07-18 12:37:40 -07:00
parent 9e4ebdb9d6
commit fa8553e417
3 changed files with 13 additions and 15 deletions

View File

@ -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<T : iterator::Iterator<char>> Parser<T> {
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<A:ToJson> ToJson for ~[A] {
fn to_json(&self) -> Json { List(self.map(|elt| elt.to_json())) }
}
impl<A:ToJson> ToJson for HashMap<~str, A> {
impl<A:ToJson> 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<A:ToJson> ToJson for HashMap<~str, A> {
}
}
impl<A:ToJson> ToJson for TreeMap<~str, A> {
impl<A:ToJson> 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)));

View File

@ -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)

View File

@ -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));