difftreelog
perf(evaluator) use hashmap for object body
in: master
4 files changed
bindings/jsonnet/src/lib.rsdiffbeforeafterboth--- a/bindings/jsonnet/src/lib.rs
+++ b/bindings/jsonnet/src/lib.rs
@@ -8,7 +8,7 @@
alloc::Layout,
any::Any,
cell::RefCell,
- collections::BTreeMap,
+ collections::HashMap,
ffi::{CStr, CString},
fs::File,
io::Read,
@@ -191,7 +191,7 @@
) {
match obj {
Val::Obj(old) => {
- let mut new = BTreeMap::new();
+ let mut new = HashMap::new();
new.insert(
CStr::from_ptr(name).to_str().unwrap().into(),
ObjMember {
crates/jrsonnet-evaluator/src/evaluate.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/evaluate.rs
+++ b/crates/jrsonnet-evaluator/src/evaluate.rs
@@ -9,10 +9,7 @@
ForSpecData, IfSpecData, LiteralType, LocExpr, Member, ObjBody, ParamsDesc, UnaryOpType,
Visibility,
};
-use std::{
- collections::{BTreeMap, HashMap},
- rc::Rc,
-};
+use std::{collections::HashMap, rc::Rc};
pub fn evaluate_binding(b: &BindSpec, context_creator: ContextCreator) -> (Rc<str>, LazyBinding) {
let b = b.clone();
@@ -242,7 +239,7 @@
new_bindings.fill(bindings);
}
- let mut new_members = BTreeMap::new();
+ let mut new_members = HashMap::new();
for member in members.iter() {
match member {
Member::Field(FieldMember {
@@ -317,7 +314,7 @@
ObjBody::MemberList(members) => evaluate_member_list_object(context, &members)?,
ObjBody::ObjComp(obj) => {
let future_this = FutureObjValue::new();
- let mut new_members = BTreeMap::new();
+ let mut new_members = HashMap::new();
for (k, v) in evaluate_comp(
context.clone(),
&|ctx| {
@@ -450,13 +447,13 @@
0, obj: [Val::Obj]!!Val::Obj, vec![ValType::Obj];
1, inc_hidden: [Val::Bool]!!Val::Bool, vec![ValType::Bool];
], {
- Ok(Val::Arr(Rc::new(
- obj.fields_visibility()
- .into_iter()
- .filter(|(_k, v)| *v || inc_hidden)
- .map(|(k, _v)| Val::Str(k))
- .collect(),
- )))
+ let mut out = obj.fields_visibility()
+ .into_iter()
+ .filter(|(_k, v)| *v || inc_hidden)
+ .map(|(k, _v)|k)
+ .collect::<Vec<_>>();
+ out.sort();
+ Ok(Val::Arr(Rc::new(out.into_iter().map(Val::Str).collect())))
}))?
}
// object, field, includeHidden
crates/jrsonnet-evaluator/src/obj.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/obj.rs
+++ b/crates/jrsonnet-evaluator/src/obj.rs
@@ -1,12 +1,7 @@
use crate::{evaluate_add_op, LazyBinding, Result, Val};
use indexmap::IndexMap;
-use jrsonnet_parser::Visibility;
-use std::{
- cell::RefCell,
- collections::{BTreeMap, HashMap},
- fmt::Debug,
- rc::Rc,
-};
+use jrsonnet_parser::{ExprLocation, Visibility};
+use std::{cell::RefCell, collections::HashMap, fmt::Debug, rc::Rc};
#[derive(Debug)]
pub struct ObjMember {
@@ -18,7 +13,7 @@
#[derive(Debug)]
pub struct ObjValueInternals {
super_obj: Option<ObjValue>,
- this_entries: Rc<BTreeMap<Rc<str>, ObjMember>>,
+ this_entries: Rc<HashMap<Rc<str>, ObjMember>>,
value_cache: RefCell<HashMap<Rc<str>, Val>>,
}
#[derive(Clone)]
@@ -44,7 +39,7 @@
impl ObjValue {
pub fn new(
super_obj: Option<ObjValue>,
- this_entries: Rc<BTreeMap<Rc<str>, ObjMember>>,
+ this_entries: Rc<HashMap<Rc<str>, ObjMember>>,
) -> ObjValue {
ObjValue(Rc::new(ObjValueInternals {
super_obj,
@@ -53,7 +48,7 @@
}))
}
pub fn new_empty() -> ObjValue {
- Self::new(None, Rc::new(BTreeMap::new()))
+ Self::new(None, Rc::new(HashMap::new()))
}
pub fn with_super(&self, super_obj: ObjValue) -> ObjValue {
match &self.0.super_obj {
crates/jrsonnet-evaluator/src/val.rsdiffbeforeafterboth246 }246 }247 Val::Obj(obj) => {247 Val::Obj(obj) => {248 buf.push_str("{\n");248 buf.push_str("{\n");249 let fields = obj.visible_fields();249 let mut fields = obj.visible_fields();250 fields.sort();250 if !fields.is_empty() {251 if !fields.is_empty() {251 let old_len = cur_padding.len();252 let old_len = cur_padding.len();252 cur_padding.push_str(padding);253 cur_padding.push_str(padding);