style: Introduce ArcSlice, a small wrapper over ThinArc but without an explicit header.

We could make the header PhantomData or something, but then we wouldn't be able
to bind to C++, since C++ doesn't have ZSTs. So add a canary instead to add a
runtime check of stuff being sane.

Differential Revision: https://phabricator.services.mozilla.com/D30133
This commit is contained in:
Emilio Cobos Álvarez 2019-05-09 10:53:50 +00:00
parent 2ed2151b3d
commit 0d5c4481b8
6 changed files with 98 additions and 3 deletions

View file

@ -188,6 +188,7 @@ pub use html5ever::Prefix;
#[cfg(feature = "servo")]
pub use servo_atoms::Atom;
pub use style_traits::arc_slice::ArcSlice;
pub use style_traits::owned_slice::OwnedSlice;
/// The CSS properties supported by the style system.

View file

@ -462,3 +462,17 @@ where
Ok(v.into_boxed_slice())
}
}
impl<T> ToAnimatedZero for crate::ArcSlice<T>
where
T: ToAnimatedZero,
{
#[inline]
fn to_animated_zero(&self) -> Result<Self, ()> {
let v = self
.iter()
.map(|v| v.to_animated_zero())
.collect::<Result<Vec<_>, _>>()?;
Ok(crate::ArcSlice::from_iter(v.into_iter()))
}
}