improve escape_small() performance

This commit is contained in:
Kogia-sima 2020-07-22 08:18:57 +09:00
parent 4e8b437387
commit 4a8ce80e3d
1 changed files with 6 additions and 7 deletions

View File

@ -60,11 +60,10 @@ pub(super) unsafe fn escape_small(feed: &str, mut buf: *mut u8) -> usize {
if unlikely!(idx < ESCAPED_LEN) {
let escaped = ESCAPED.get_unchecked(idx);
if ptr > start_ptr {
let slc =
slice::from_raw_parts(start_ptr, ptr as usize - start_ptr as usize);
let len = ptr as usize - start_ptr as usize;
memcpy_16(slc.as_ptr(), buf, slc.len());
buf = buf.add(slc.len());
memcpy_16(start_ptr, buf, len);
buf = buf.add(len);
}
memcpy_16(escaped.as_ptr(), buf, escaped.len());
buf = buf.add(escaped.len());
@ -77,9 +76,9 @@ pub(super) unsafe fn escape_small(feed: &str, mut buf: *mut u8) -> usize {
debug_assert!(start_ptr <= ptr);
if likely!(end_ptr > start_ptr) {
let slc = slice::from_raw_parts(start_ptr, end_ptr as usize - start_ptr as usize);
memcpy_16(slc.as_ptr(), buf, slc.len());
buf = buf.add(slc.len());
let len = end_ptr as usize - start_ptr as usize;
memcpy_16(start_ptr, buf, len);
buf = buf.add(len);
}
buf as usize - buf_begin as usize