Produce location variants more efficiently (#4096)

This commit is contained in:
Laurenz 2024-05-08 12:54:58 +02:00 committed by GitHub
parent 560791afe8
commit 4bca472210
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 11 additions and 9 deletions

View File

@ -28,17 +28,19 @@ pub struct Location {
/// An unique number among elements with the same hash. This is the reason
/// we need a `Locator` everywhere.
pub disambiguator: usize,
/// A synthetic location created from another one. This is used for example
/// in bibliography management to create individual linkable locations for
/// reference entries from the bibliography's location.
pub variant: usize,
}
impl Location {
/// Produce a variant of this location.
pub fn variant(mut self, n: usize) -> Self {
self.variant = n;
self
/// Produces a well-known variant of this location.
///
/// This is a synthetic location created from another one and is used, for
/// example, in bibliography management to create individual linkable
/// locations for reference entries from the bibliography's location.
pub fn variant(self, n: usize) -> Self {
Self {
hash: crate::util::hash128(&(self.hash, n)),
..self
}
}
}

View File

@ -69,7 +69,7 @@ impl<'a> Locator<'a> {
self.hashes.get_mut().insert(hash, disambiguator + 1);
// Create the location in its default variant.
Location { hash, disambiguator, variant: 0 }
Location { hash, disambiguator }
}
/// Advance past a frame.