From 97b39fa3ee031a61e069a295130cbfe7f40948cc Mon Sep 17 00:00:00 2001 From: Pauan Date: Fri, 21 Jun 2019 13:22:53 +0200 Subject: [PATCH] More tweaks to the interning --- src/cache.rs | 4 ++-- src/dom.rs | 27 ++++++++++----------------- 2 files changed, 12 insertions(+), 19 deletions(-) diff --git a/src/cache.rs b/src/cache.rs index 854ae3e..bf8251c 100644 --- a/src/cache.rs +++ b/src/cache.rs @@ -1,10 +1,10 @@ use std::cell::RefCell; -use std::collections::HashMap; +use std::collections::BTreeMap; use js_sys::JsString; thread_local! { // TODO is it possible to avoid the RefCell ? - static CACHE: RefCell> = RefCell::new(HashMap::new()); + static CACHE: RefCell> = RefCell::new(BTreeMap::new()); } // TODO make this more efficient diff --git a/src/dom.rs b/src/dom.rs index 326bbee..c7946f0 100644 --- a/src/dom.rs +++ b/src/dom.rs @@ -291,7 +291,7 @@ fn set_option(element: A, callbacks: &mut Callbacks, value: D, mu })); } -fn set_style(element: &JsValue, name: &A, value: B, important: bool, should_intern: bool) +fn set_style(element: &JsValue, name: &A, value: B, important: bool) where A: MultiStr, B: MultiStr { @@ -326,15 +326,8 @@ fn set_style(element: &JsValue, name: &A, value: B, important: bool, shoul let name = intern(name); value.any(|value| { - // TODO maybe always intern the value ? - let value = if should_intern { - intern(value) - - } else { - JsString::from(value) - }; - - try_set_style(element, &mut names, &mut values, &name, &value, important) + // TODO should this intern ? + try_set_style(element, &mut names, &mut values, &name, &JsString::from(value), important) }) }); @@ -357,7 +350,7 @@ fn set_style_signal(element: &JsValue, callbacks: &mut Callbacks, na match value { Some(value) => { // TODO should this intern or not ? - set_style(element, &name, value, important, true); + set_style(element, &name, value, important); }, None => { name.each(|name| { @@ -661,7 +654,7 @@ impl DomBuilder where A: AsRef { Some(value) => { let value = value.as_str(); // TODO should this intern ? - let value = intern(value); + let value = JsString::from(value); name.each(|name| { bindings::set_attribute(element, &intern(name), &value); @@ -701,7 +694,7 @@ impl DomBuilder where A: AsRef { Some(value) => { let value = value.as_str(); // TODO should this intern ? - let value = intern(value); + let value = JsString::from(value); name.each(|name| { bindings::set_attribute_ns(element, &namespace, &intern(name), &value); @@ -811,7 +804,7 @@ impl DomBuilder where A: AsRef { pub fn style(self, name: B, value: C) -> Self where B: MultiStr, C: MultiStr { - set_style(self.element.as_ref(), &name, value, false, true); + set_style(self.element.as_ref(), &name, value, false); self } @@ -819,7 +812,7 @@ impl DomBuilder where A: AsRef { pub fn style_important(self, name: B, value: C) -> Self where B: MultiStr, C: MultiStr { - set_style(self.element.as_ref(), &name, value, true, true); + set_style(self.element.as_ref(), &name, value, true); self } } @@ -932,7 +925,7 @@ impl StylesheetBuilder { pub fn style(self, name: B, value: C) -> Self where B: MultiStr, C: MultiStr { - set_style(&self.element, &name, value, false, true); + set_style(&self.element, &name, value, false); self } @@ -940,7 +933,7 @@ impl StylesheetBuilder { pub fn style_important(self, name: B, value: C) -> Self where B: MultiStr, C: MultiStr { - set_style(&self.element, &name, value, true, true); + set_style(&self.element, &name, value, true); self }