1010
1111//! Support for lookups based on minimal perfect hashing.
1212
13- use tables:: * ;
14-
1513// This function is based on multiplication being fast and is "good enough". Also
1614// it can share some work between the unsalted and salted versions.
1715#[ inline]
@@ -29,7 +27,7 @@ fn my_hash(key: u32, salt: u32, n: usize) -> usize {
2927/// The hash function doesn't have to be very good, just good enough that the
3028/// resulting map is unique.
3129#[ inline]
32- fn mph_lookup < KV , V , FK , FV > ( x : u32 , salt : & [ u16 ] , kv : & [ KV ] , fk : FK , fv : FV ,
30+ pub ( crate ) fn mph_lookup < KV , V , FK , FV > ( x : u32 , salt : & [ u16 ] , kv : & [ KV ] , fk : FK , fv : FV ,
3331 default : V ) -> V
3432 where KV : Copy , FK : Fn ( KV ) -> u32 , FV : Fn ( KV ) -> V
3533{
@@ -41,78 +39,3 @@ fn mph_lookup<KV, V, FK, FV>(x: u32, salt: &[u16], kv: &[KV], fk: FK, fv: FV,
4139 default
4240 }
4341}
44-
45- /// Extract the key in a 24 bit key and 8 bit value packed in a u32.
46- #[ inline]
47- fn u8_lookup_fk ( kv : u32 ) -> u32 {
48- kv >> 8
49- }
50-
51- /// Extract the value in a 24 bit key and 8 bit value packed in a u32.
52- #[ inline]
53- fn u8_lookup_fv ( kv : u32 ) -> u8 {
54- ( kv & 0xff ) as u8
55- }
56-
57- /// Extract the key for a boolean lookup.
58- #[ inline]
59- fn bool_lookup_fk ( kv : u32 ) -> u32 {
60- kv
61- }
62-
63- /// Extract the value for a boolean lookup.
64- #[ inline]
65- fn bool_lookup_fv ( _kv : u32 ) -> bool {
66- true
67- }
68-
69- /// Extract the key in a pair.
70- #[ inline]
71- fn pair_lookup_fk < T > ( kv : ( u32 , T ) ) -> u32 {
72- kv. 0
73- }
74-
75- /// Extract the value in a pair, returning an option.
76- #[ inline]
77- fn pair_lookup_fv_opt < T > ( kv : ( u32 , T ) ) -> Option < T > {
78- Some ( kv. 1 )
79- }
80-
81- /// Look up the canonical combining class for a codepoint.
82- ///
83- /// The value returned is as defined in the Unicode Character Database.
84- pub fn canonical_combining_class ( c : char ) -> u8 {
85- mph_lookup ( c. into ( ) , CANONICAL_COMBINING_CLASS_SALT , CANONICAL_COMBINING_CLASS_KV ,
86- u8_lookup_fk, u8_lookup_fv, 0 )
87- }
88-
89- pub ( crate ) fn composition_table ( c1 : char , c2 : char ) -> Option < char > {
90- if c1 < '\u{10000}' && c2 < '\u{10000}' {
91- mph_lookup ( ( c1 as u32 ) << 16 | ( c2 as u32 ) ,
92- COMPOSITION_TABLE_SALT , COMPOSITION_TABLE_KV ,
93- pair_lookup_fk, pair_lookup_fv_opt, None )
94- } else {
95- composition_table_astral ( c1, c2)
96- }
97- }
98-
99- pub ( crate ) fn canonical_fully_decomposed ( c : char ) -> Option < & ' static [ char ] > {
100- mph_lookup ( c. into ( ) , CANONICAL_DECOMPOSED_SALT , CANONICAL_DECOMPOSED_KV ,
101- pair_lookup_fk, pair_lookup_fv_opt, None )
102- }
103-
104- pub ( crate ) fn compatibility_fully_decomposed ( c : char ) -> Option < & ' static [ char ] > {
105- mph_lookup ( c. into ( ) , COMPATIBILITY_DECOMPOSED_SALT , COMPATIBILITY_DECOMPOSED_KV ,
106- pair_lookup_fk, pair_lookup_fv_opt, None )
107- }
108-
109- /// Return whether the given character is a combining mark (`General_Category=Mark`)
110- pub fn is_combining_mark ( c : char ) -> bool {
111- mph_lookup ( c. into ( ) , COMBINING_MARK_SALT , COMBINING_MARK_KV ,
112- bool_lookup_fk, bool_lookup_fv, false )
113- }
114-
115- pub fn stream_safe_trailing_nonstarters ( c : char ) -> usize {
116- mph_lookup ( c. into ( ) , TRAILING_NONSTARTERS_SALT , TRAILING_NONSTARTERS_KV ,
117- u8_lookup_fk, u8_lookup_fv, 0 ) as usize
118- }
0 commit comments