Make Node and Element rare_data an Option

This commit is contained in:
Fernando Jiménez Moreno 2019-03-08 17:03:34 +01:00
parent f6069630d2
commit 6bf1ca20a2
8 changed files with 181 additions and 120 deletions

View file

@ -632,3 +632,33 @@ macro_rules! handle_potential_webgl_error {
handle_potential_webgl_error!($context, $call, ());
};
}
macro_rules! impl_rare_data (
($type:ty) => (
fn init_rare_data(&self) {
let mut rare_data = self.rare_data.borrow_mut();
if rare_data.is_none() {
*rare_data = Some(Default::default());
}
}
fn rare_data(&self) -> Ref<Option<Box<$type>>> {
self.init_rare_data();
self.rare_data.borrow()
}
fn rare_data_mut(&self) -> RefMut<Option<Box<$type>>> {
self.init_rare_data();
self.rare_data.borrow_mut()
}
#[allow(unsafe_code)]
fn rare_data_for_layout(&self) -> &Option<Box<$type>> {
let mut rare_data = self.rare_data.borrow_mut_for_layout();
if rare_data.is_none() {
*rare_data = Some(Default::default());
}
unsafe { self.rare_data.borrow_for_layout() }
}
);
);