mirror of
https://github.com/pezkuwichain/serde.git
synced 2026-04-23 05:58:01 +00:00
58b3af4c29
The following changes are included: - Delete per-file license notices at the top of each file. - Delete the first paragraph of LICENSE-MIT (an inaccurate pseudo-copyright line), leaving only the text of the MIT license. Nothing about the license of Serde code has changed, only our understanding of how to correctly communicate that license has changed. This mirrors an equivalent change being applied in the rust-lang/rust repository.
47 lines
1.2 KiB
Rust
47 lines
1.2 KiB
Rust
use 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: buf, pos: 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()
|
|
}
|
|
}
|