Merge pull request #2599 from dtolnay/encodeutf8

Remove custom encode_utf8 implementation in favor of standard one
This commit is contained in:
David Tolnay 2023-08-23 17:06:39 -07:00 committed by GitHub
commit a741293886
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 1 additions and 48 deletions

View File

@ -123,7 +123,6 @@ mod format;
mod ignored_any; mod ignored_any;
mod impls; mod impls;
pub(crate) mod size_hint; pub(crate) mod size_hint;
mod utf8;
pub use self::ignored_any::IgnoredAny; pub use self::ignored_any::IgnoredAny;
@ -1478,7 +1477,7 @@ pub trait Visitor<'de>: Sized {
where where
E: Error, E: Error,
{ {
self.visit_str(utf8::encode(v).as_str()) self.visit_str(v.encode_utf8(&mut [0u8; 4]))
} }
/// The input contains a string. The lifetime of the string is ephemeral and /// The input contains a string. The lifetime of the string is ephemeral and

View File

@ -1,46 +0,0 @@
use crate::lib::*;
const TAG_CONT: u8 = 0b1000_0000;
const TAG_TWO_B: u8 = 0b1100_0000;
const TAG_THREE_B: u8 = 0b1110_0000;
const TAG_FOUR_B: u8 = 0b1111_0000;
const MAX_ONE_B: u32 = 0x80;
const MAX_TWO_B: u32 = 0x800;
const MAX_THREE_B: u32 = 0x10000;
#[inline]
pub fn encode(c: char) -> Encode {
let code = c as u32;
let mut buf = [0; 4];
let pos = if code < MAX_ONE_B {
buf[3] = code as u8;
3
} else if code < MAX_TWO_B {
buf[2] = (code >> 6 & 0x1F) as u8 | TAG_TWO_B;
buf[3] = (code & 0x3F) as u8 | TAG_CONT;
2
} else if code < MAX_THREE_B {
buf[1] = (code >> 12 & 0x0F) as u8 | TAG_THREE_B;
buf[2] = (code >> 6 & 0x3F) as u8 | TAG_CONT;
buf[3] = (code & 0x3F) as u8 | TAG_CONT;
1
} else {
buf[0] = (code >> 18 & 0x07) as u8 | TAG_FOUR_B;
buf[1] = (code >> 12 & 0x3F) as u8 | TAG_CONT;
buf[2] = (code >> 6 & 0x3F) as u8 | TAG_CONT;
buf[3] = (code & 0x3F) as u8 | TAG_CONT;
0
};
Encode { buf, pos }
}
pub struct Encode {
buf: [u8; 4],
pos: usize,
}
impl Encode {
pub fn as_str(&self) -> &str {
str::from_utf8(&self.buf[self.pos..]).unwrap()
}
}