aboutsummaryrefslogtreecommitdiffstats
path: root/components/selectors/context.rs
diff options
context:
space:
mode:
authorBobby Holley <bobbyholley@gmail.com>2017-09-20 12:43:29 -0700
committerBobby Holley <bobbyholley@gmail.com>2017-09-20 23:22:38 -0700
commit48466bf8761d3a9c6064eb2b39fc74e790e26cb7 (patch)
treefa7aaab6ebd8c516d1410af8a927e68268c4662e /components/selectors/context.rs
parent05c03d5104ae6d0790c153e4fa8df7ac7015db18 (diff)
downloadservo-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.rs13
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(),
}