9
9
// except according to those terms.
10
10
11
11
//! Functions for computing canonical and compatible decompositions for Unicode characters.
12
-
12
+ use std :: char ;
13
13
use std:: cmp:: Ordering :: { Equal , Less , Greater } ;
14
14
use std:: ops:: FnMut ;
15
15
use tables:: normalization:: { canonical_table, canonical_table_STRTAB} ;
@@ -124,20 +124,18 @@ const S_COUNT: u32 = (L_COUNT * N_COUNT);
124
124
#[ allow( unsafe_code) ]
125
125
#[ inline( always) ]
126
126
fn decompose_hangul < F > ( s : char , f : & mut F ) where F : FnMut ( char ) {
127
- use std:: mem:: transmute;
128
-
129
127
let si = s as u32 - S_BASE ;
130
128
131
129
let li = si / N_COUNT ;
132
130
unsafe {
133
- ( * f) ( transmute ( L_BASE + li) ) ;
131
+ ( * f) ( char :: from_u32_unchecked ( L_BASE + li) ) ;
134
132
135
133
let vi = ( si % N_COUNT ) / T_COUNT ;
136
- ( * f) ( transmute ( V_BASE + vi) ) ;
134
+ ( * f) ( char :: from_u32_unchecked ( V_BASE + vi) ) ;
137
135
138
136
let ti = si % T_COUNT ;
139
137
if ti > 0 {
140
- ( * f) ( transmute ( T_BASE + ti) ) ;
138
+ ( * f) ( char :: from_u32_unchecked ( T_BASE + ti) ) ;
141
139
}
142
140
}
143
141
}
@@ -146,22 +144,20 @@ fn decompose_hangul<F>(s: char, f: &mut F) where F: FnMut(char) {
146
144
#[ allow( unsafe_code) ]
147
145
#[ inline( always) ]
148
146
fn compose_hangul ( a : char , b : char ) -> Option < char > {
149
- use std:: mem:: transmute;
150
-
151
147
let l = a as u32 ;
152
148
let v = b as u32 ;
153
149
// Compose an LPart and a VPart
154
150
if L_BASE <= l && l < ( L_BASE + L_COUNT ) // l should be an L choseong jamo
155
151
&& V_BASE <= v && v < ( V_BASE + V_COUNT ) { // v should be a V jungseong jamo
156
152
let r = S_BASE + ( l - L_BASE ) * N_COUNT + ( v - V_BASE ) * T_COUNT ;
157
- return unsafe { Some ( transmute ( r) ) } ;
153
+ return unsafe { Some ( char :: from_u32_unchecked ( r) ) } ;
158
154
}
159
155
// Compose an LVPart and a TPart
160
156
if S_BASE <= l && l <= ( S_BASE +S_COUNT -T_COUNT ) // l should be a syllable block
161
157
&& T_BASE <= v && v < ( T_BASE +T_COUNT ) // v should be a T jongseong jamo
162
158
&& ( l - S_BASE ) % T_COUNT == 0 { // l should be an LV syllable block (not LVT)
163
159
let r = l + ( v - T_BASE ) ;
164
- return unsafe { Some ( transmute ( r) ) } ;
160
+ return unsafe { Some ( char :: from_u32_unchecked ( r) ) } ;
165
161
}
166
162
None
167
163
}
0 commit comments