MCPcopy Create free account
hub / github.com/apache/fory / write_utf16_standard

Function write_utf16_standard

rust/fory-core/src/util/string_util.rs:733–762  ·  view source on GitHub ↗
(writer: &mut Writer, utf16: &[u16])

Source from the content-addressed store, hash-verified

731
732 #[inline]
733 pub fn write_utf16_standard(writer: &mut Writer, utf16: &[u16]) {
734 #[cfg(target_endian = "little")]
735 {
736 let total_bytes = utf16.len() * 2;
737 let old_len = writer.bf.len();
738 writer.bf.reserve(total_bytes);
739 unsafe {
740 let dest = writer.bf.as_mut_ptr().add(old_len);
741 let src = utf16.as_ptr() as *const u8;
742 std::ptr::copy_nonoverlapping(src, dest, total_bytes);
743 writer.bf.set_len(old_len + total_bytes);
744 }
745 }
746 #[cfg(target_endian = "big")]
747 {
748 let total_bytes = utf16.len() * 2;
749 let old_len = writer.bf.len();
750 writer.bf.reserve(total_bytes);
751 unsafe {
752 let dest = writer.bf.as_mut_ptr().add(old_len);
753 // Need to swap bytes for each u16 to little-endian
754 for (i, &unit) in utf16.iter().enumerate() {
755 let swapped = unit.swap_bytes();
756 let ptr = dest.add(i * 2) as *mut u16;
757 std::ptr::write_unaligned(ptr, swapped);
758 }
759 writer.bf.set_len(old_len + total_bytes);
760 }
761 }
762 }
763
764 #[inline]
765 pub fn read_latin1_standard(reader: &mut Reader, len: usize) -> Result<String, Error> {

Callers 1

test_utf16Function · 0.85

Calls 3

lenMethod · 0.80
addMethod · 0.65
reserveMethod · 0.45

Tested by 1

test_utf16Function · 0.68