mirror of
https://github.com/RGBCube/cstree
synced 2025-07-29 01:57:44 +00:00
use rustc_hash instead of fxhash (#73)
* use rustc_hash instead of fxhash * implement debug properly
This commit is contained in:
parent
c061bf5a6b
commit
e90300f4fc
5 changed files with 25 additions and 15 deletions
|
@ -13,7 +13,7 @@ rust-version.workspace = true
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
text-size = "1.1.0"
|
text-size = "1.1.0"
|
||||||
fxhash = "0.2.1"
|
rustc-hash = "2.1.1"
|
||||||
parking_lot = "0.12.1"
|
parking_lot = "0.12.1"
|
||||||
|
|
||||||
# Arc
|
# Arc
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
use std::hash::{Hash, Hasher};
|
use std::hash::{Hash, Hasher};
|
||||||
|
|
||||||
use fxhash::{FxHashMap, FxHasher32};
|
use rustc_hash::{FxHashMap, FxHasher};
|
||||||
use text_size::TextSize;
|
use text_size::TextSize;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
|
@ -180,7 +180,7 @@ where
|
||||||
fn node<S: Syntax>(&mut self, kind: S, all_children: &mut Vec<GreenElement>, offset: usize) -> GreenNode {
|
fn node<S: Syntax>(&mut self, kind: S, all_children: &mut Vec<GreenElement>, offset: usize) -> GreenNode {
|
||||||
// NOTE: this fn must remove all children starting at `first_child` from `all_children` before returning
|
// NOTE: this fn must remove all children starting at `first_child` from `all_children` before returning
|
||||||
let kind = S::into_raw(kind);
|
let kind = S::into_raw(kind);
|
||||||
let mut hasher = FxHasher32::default();
|
let mut hasher = FxHasher::default();
|
||||||
let mut text_len: TextSize = 0.into();
|
let mut text_len: TextSize = 0.into();
|
||||||
for child in &all_children[offset..] {
|
for child in &all_children[offset..] {
|
||||||
text_len += child.text_len();
|
text_len += child.text_len();
|
||||||
|
|
|
@ -3,7 +3,7 @@ use std::{
|
||||||
slice,
|
slice,
|
||||||
};
|
};
|
||||||
|
|
||||||
use fxhash::FxHasher32;
|
use rustc_hash::FxHasher;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
green::{iter::GreenNodeChildren, GreenElement, PackedGreenElement},
|
green::{iter::GreenNodeChildren, GreenElement, PackedGreenElement},
|
||||||
|
@ -41,7 +41,7 @@ impl GreenNode {
|
||||||
I: IntoIterator<Item = GreenElement>,
|
I: IntoIterator<Item = GreenElement>,
|
||||||
I::IntoIter: ExactSizeIterator,
|
I::IntoIter: ExactSizeIterator,
|
||||||
{
|
{
|
||||||
let mut hasher = FxHasher32::default();
|
let mut hasher = FxHasher::default();
|
||||||
let mut text_len: TextSize = 0.into();
|
let mut text_len: TextSize = 0.into();
|
||||||
let children = children
|
let children = children
|
||||||
.into_iter()
|
.into_iter()
|
||||||
|
|
|
@ -2,15 +2,15 @@
|
||||||
|
|
||||||
use core::fmt;
|
use core::fmt;
|
||||||
|
|
||||||
use fxhash::FxBuildHasher as Hasher;
|
|
||||||
use indexmap::IndexSet;
|
use indexmap::IndexSet;
|
||||||
|
use rustc_hash::FxBuildHasher;
|
||||||
|
|
||||||
use super::{InternKey, Interner, Resolver, TokenKey};
|
use super::{InternKey, Interner, Resolver, TokenKey};
|
||||||
|
|
||||||
/// The default [`Interner`] used to deduplicate green token strings.
|
/// The default [`Interner`] used to deduplicate green token strings.
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct TokenInterner {
|
pub struct TokenInterner {
|
||||||
id_set: IndexSet<String, Hasher>,
|
id_set: IndexSet<String, FxBuildHasher>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl TokenInterner {
|
impl TokenInterner {
|
||||||
|
|
|
@ -2,10 +2,10 @@
|
||||||
|
|
||||||
#![cfg(feature = "lasso_compat")]
|
#![cfg(feature = "lasso_compat")]
|
||||||
|
|
||||||
use std::{hash::BuildHasher, num::NonZeroUsize};
|
use std::{fmt, hash::BuildHasher, num::NonZeroUsize};
|
||||||
|
|
||||||
use fxhash::FxBuildHasher as Hasher;
|
|
||||||
use lasso::{Capacity, Rodeo, ThreadedRodeo};
|
use lasso::{Capacity, Rodeo, ThreadedRodeo};
|
||||||
|
use rustc_hash::FxBuildHasher;
|
||||||
|
|
||||||
use crate::interning::{Interner, Resolver, TokenKey};
|
use crate::interning::{Interner, Resolver, TokenKey};
|
||||||
|
|
||||||
|
@ -50,9 +50,8 @@ macro_rules! impl_traits {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The default [`Interner`] used to deduplicate green token strings.
|
/// The default [`Interner`] used to deduplicate green token strings.
|
||||||
#[derive(Debug)]
|
|
||||||
pub struct TokenInterner {
|
pub struct TokenInterner {
|
||||||
rodeo: Rodeo<TokenKey, Hasher>,
|
rodeo: Rodeo<TokenKey, FxBuildHasher>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl TokenInterner {
|
impl TokenInterner {
|
||||||
|
@ -60,7 +59,7 @@ impl TokenInterner {
|
||||||
Self {
|
Self {
|
||||||
rodeo: Rodeo::with_capacity_and_hasher(
|
rodeo: Rodeo::with_capacity_and_hasher(
|
||||||
Capacity::new(DEFAULT_STRING_CAPACITY, DEFAULT_BYTE_CAPACITY),
|
Capacity::new(DEFAULT_STRING_CAPACITY, DEFAULT_BYTE_CAPACITY),
|
||||||
Hasher::default(),
|
FxBuildHasher,
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -73,6 +72,12 @@ impl TokenInterner {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl fmt::Debug for TokenInterner {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
|
f.write_str("TokenInterner")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl_traits!(for TokenInterner);
|
impl_traits!(for TokenInterner);
|
||||||
|
|
||||||
#[cfg(feature = "multi_threaded_interning")]
|
#[cfg(feature = "multi_threaded_interning")]
|
||||||
|
@ -87,9 +92,8 @@ mod multi_threaded {
|
||||||
/// Note that [`Interner`] and [`Resolver`] are also implemented for `&MultiThreadTokenInterner` so you can pass
|
/// Note that [`Interner`] and [`Resolver`] are also implemented for `&MultiThreadTokenInterner` so you can pass
|
||||||
/// `&mut &interner` in shared contexts.
|
/// `&mut &interner` in shared contexts.
|
||||||
#[cfg_attr(doc_cfg, doc(cfg(feature = "multi_threaded_interning")))]
|
#[cfg_attr(doc_cfg, doc(cfg(feature = "multi_threaded_interning")))]
|
||||||
#[derive(Debug)]
|
|
||||||
pub struct MultiThreadedTokenInterner {
|
pub struct MultiThreadedTokenInterner {
|
||||||
rodeo: ThreadedRodeo<TokenKey, Hasher>,
|
rodeo: ThreadedRodeo<TokenKey, FxBuildHasher>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl MultiThreadedTokenInterner {
|
impl MultiThreadedTokenInterner {
|
||||||
|
@ -97,12 +101,18 @@ mod multi_threaded {
|
||||||
Self {
|
Self {
|
||||||
rodeo: ThreadedRodeo::with_capacity_and_hasher(
|
rodeo: ThreadedRodeo::with_capacity_and_hasher(
|
||||||
Capacity::new(DEFAULT_STRING_CAPACITY, DEFAULT_BYTE_CAPACITY),
|
Capacity::new(DEFAULT_STRING_CAPACITY, DEFAULT_BYTE_CAPACITY),
|
||||||
Hasher::default(),
|
FxBuildHasher,
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl fmt::Debug for MultiThreadedTokenInterner {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
|
f.write_str("MultiThreadedTokenInterner")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl_traits!(for MultiThreadedTokenInterner, if #[cfg(feature = "multi_threaded_interning")]);
|
impl_traits!(for MultiThreadedTokenInterner, if #[cfg(feature = "multi_threaded_interning")]);
|
||||||
|
|
||||||
impl_traits!(for &MultiThreadedTokenInterner, if #[cfg(feature = "multi_threaded_interning")]);
|
impl_traits!(for &MultiThreadedTokenInterner, if #[cfg(feature = "multi_threaded_interning")]);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue