diff options
author | Ms2ger <ms2ger@gmail.com> | 2015-04-27 23:38:18 +0200 |
---|---|---|
committer | Ms2ger <ms2ger@gmail.com> | 2015-04-27 23:44:22 +0200 |
commit | ed052bc080dc78cf30d416609311172fa2fbd14e (patch) | |
tree | f45e8cfe193a5af944b3d81e65b75e3400454b16 | |
parent | 811ea395bc71b7b667f293c75b83db92b3e28a78 (diff) | |
download | servo-ed052bc080dc78cf30d416609311172fa2fbd14e.tar.gz servo-ed052bc080dc78cf30d416609311172fa2fbd14e.zip |
Move the sink into util::vec.
-rw-r--r-- | components/layout/css/matching.rs | 26 | ||||
-rw-r--r-- | components/util/vec.rs | 36 |
2 files changed, 39 insertions, 23 deletions
diff --git a/components/layout/css/matching.rs b/components/layout/css/matching.rs index b84b04e167c..b29ea3cad9c 100644 --- a/components/layout/css/matching.rs +++ b/components/layout/css/matching.rs @@ -20,7 +20,6 @@ use selectors::bloom::BloomFilter; use selectors::matching::{CommonStyleAffectingAttributeMode, CommonStyleAffectingAttributes}; use selectors::matching::{common_style_affecting_attributes, rare_style_affecting_attributes}; use selectors::parser::PseudoElement; -use selectors::smallvec::VecLike; use std::borrow::ToOwned; use std::hash::{Hash, Hasher}; use std::mem; @@ -35,6 +34,7 @@ use util::arc_ptr_eq; use util::cache::{LRUCache, SimpleHashCache}; use util::opts; use util::smallvec::{SmallVec, SmallVec16}; +use util::vec::ForgetfulSink; pub struct ApplicableDeclarations { pub normal: SmallVec16<DeclarationBlock>, @@ -290,29 +290,9 @@ impl StyleSharingCandidate { return false } - struct RulesSink { - empty: bool, - } - impl<T> VecLike<T> for RulesSink { - #[inline] - fn vec_len(&self) -> usize { - unreachable!() - } - - #[inline] - fn vec_push(&mut self, _value: T) { - self.empty = false; - } - - #[inline] - fn vec_slice_mut<'a>(&'a mut self, _start: usize, _end: usize) - -> &'a mut [T] { - unreachable!() - } - } - let mut matching_rules = RulesSink { empty: true }; + let mut matching_rules = ForgetfulSink::new(); element.synthesize_presentational_hints_for_legacy_attributes(&mut matching_rules); - if !matching_rules.empty { + if !matching_rules.is_empty() { return false; } diff --git a/components/util/vec.rs b/components/util/vec.rs index 5b26e6334a0..238118aac1d 100644 --- a/components/util/vec.rs +++ b/components/util/vec.rs @@ -2,6 +2,8 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +use selectors::smallvec::VecLike; + use std::cmp::{PartialOrd, PartialEq, Ordering}; use std::iter::range_step; @@ -72,3 +74,37 @@ pub fn byte_swap(data: &mut [u8]) { data[i + 0] = r; } } + +/// A `VecLike` that only tracks whether or not something was ever pushed to it. +pub struct ForgetfulSink { + empty: bool, +} + +impl ForgetfulSink { + pub fn new() -> ForgetfulSink { + ForgetfulSink { + empty: true, + } + } + + pub fn is_empty(&self) -> bool { + self.empty + } +} + +impl<T> VecLike<T> for ForgetfulSink { + #[inline] + fn vec_len(&self) -> usize { + unreachable!() + } + + #[inline] + fn vec_push(&mut self, _value: T) { + self.empty = false; + } + + #[inline] + fn vec_slice_mut<'a>(&'a mut self, _start: usize, _end: usize) -> &'a mut [T] { + unreachable!() + } +} |