提交 79dfa259 编写于 作者: A Andrea Canciani

Improve naming and explanations

上级 7b33d39d
......@@ -300,15 +300,18 @@ fn to_digit(self, radix: u32) -> Option<u32> {
#[inline]
fn escape_unicode(self) -> EscapeUnicode {
let c = self as u32;
// or-ing 1 ensures that for c==0 the code computes that one
// digit should be printed and (which is the same) avoids the
// (31 - 32) underflow
let msb = 31 - (c | 1).leading_zeros();
let msdigit = msb / 4;
// the index of the most significant hex digit
let ms_hex_digit = msb / 4;
EscapeUnicode {
c: self,
state: EscapeUnicodeState::Backslash,
offset: msdigit as usize,
hex_digit_idx: ms_hex_digit as usize,
}
}
......@@ -431,7 +434,11 @@ pub fn encode_utf16_raw(mut ch: u32, dst: &mut [u16]) -> Option<usize> {
pub struct EscapeUnicode {
c: char,
state: EscapeUnicodeState,
offset: usize,
// The index of the next hex digit to be printed (0 if none),
// i.e. the number of remaining hex digits to be printed;
// increasing from the least significant digit: 0x543210
hex_digit_idx: usize,
}
#[derive(Clone)]
......@@ -463,11 +470,11 @@ fn next(&mut self) -> Option<char> {
Some('{')
}
EscapeUnicodeState::Value => {
let c = from_digit(((self.c as u32) >> (self.offset * 4)) & 0xf, 16).unwrap();
if self.offset == 0 {
let c = from_digit(((self.c as u32) >> (self.hex_digit_idx * 4)) & 0xf, 16).unwrap();
if self.hex_digit_idx == 0 {
self.state = EscapeUnicodeState::RightBrace;
} else {
self.offset -= 1;
self.hex_digit_idx -= 1;
}
Some(c)
}
......@@ -488,7 +495,7 @@ fn size_hint(&self) -> (usize, Option<usize>) {
EscapeUnicodeState::RightBrace => 1,
EscapeUnicodeState::Done => 0,
};
let n = n + self.offset;
let n = n + self.hex_digit_idx;
(n, Some(n))
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册