diff options
author | Bobby Holley <bobbyholley@gmail.com> | 2017-09-20 12:43:29 -0700 |
---|---|---|
committer | Bobby Holley <bobbyholley@gmail.com> | 2017-09-20 23:22:38 -0700 |
commit | 48466bf8761d3a9c6064eb2b39fc74e790e26cb7 (patch) | |
tree | fa7aaab6ebd8c516d1410af8a927e68268c4662e /components/selectors/context.rs | |
parent | 05c03d5104ae6d0790c153e4fa8df7ac7015db18 (diff) | |
download | servo-48466bf8761d3a9c6064eb2b39fc74e790e26cb7.tar.gz servo-48466bf8761d3a9c6064eb2b39fc74e790e26cb7.zip |
Introduce an NthIndexCache type and pipe it from ThreadLocalStyleContext to MatchingContext.
Some future refactoring here to pass fewer things as parameters would be nice.
Diffstat (limited to 'components/selectors/context.rs')
-rw-r--r-- | components/selectors/context.rs | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/components/selectors/context.rs b/components/selectors/context.rs index 31ce04b37a1..46991d349ce 100644 --- a/components/selectors/context.rs +++ b/components/selectors/context.rs @@ -69,15 +69,22 @@ impl QuirksMode { } } +/// A cache to speed up matching of nth-index-like selectors. +/// +/// NB: This is just a dummy type right now, it will be fleshed out in later patches. +#[derive(Default)] +pub struct NthIndexCache(usize); + /// Data associated with the matching process for a element. This context is /// used across many selectors for an element, so it's not appropriate for /// transient data that applies to only a single selector. -#[derive(Clone)] pub struct MatchingContext<'a> { /// Input with the matching mode we should use when matching selectors. pub matching_mode: MatchingMode, /// Input with the bloom filter used to fast-reject selectors. pub bloom_filter: Option<&'a BloomFilter>, + /// An optional cache to speed up nth-index-like selectors. + nth_index_cache: Option<&'a mut NthIndexCache>, /// Input that controls how matching for links is handled. pub visited_handling: VisitedHandlingMode, /// Output that records whether we encountered a "relevant link" while @@ -94,12 +101,14 @@ impl<'a> MatchingContext<'a> { /// Constructs a new `MatchingContext`. pub fn new(matching_mode: MatchingMode, bloom_filter: Option<&'a BloomFilter>, + nth_index_cache: Option<&'a mut NthIndexCache>, quirks_mode: QuirksMode) -> Self { Self { matching_mode: matching_mode, bloom_filter: bloom_filter, + nth_index_cache: nth_index_cache, visited_handling: VisitedHandlingMode::AllLinksUnvisited, relevant_link_found: false, quirks_mode: quirks_mode, @@ -110,6 +119,7 @@ impl<'a> MatchingContext<'a> { /// Constructs a new `MatchingContext` for use in visited matching. pub fn new_for_visited(matching_mode: MatchingMode, bloom_filter: Option<&'a BloomFilter>, + nth_index_cache: Option<&'a mut NthIndexCache>, visited_handling: VisitedHandlingMode, quirks_mode: QuirksMode) -> Self @@ -119,6 +129,7 @@ impl<'a> MatchingContext<'a> { bloom_filter: bloom_filter, visited_handling: visited_handling, relevant_link_found: false, + nth_index_cache: nth_index_cache, quirks_mode: quirks_mode, classes_and_ids_case_sensitivity: quirks_mode.classes_and_ids_case_sensitivity(), } |