use core::slice;
use xutf::{AsciiCase, Encoding, Utf8, Utf16, Utf32, transcode_into};
#[inline(always)]
unsafe fn transcode<F: Encoding, T: Encoding>(
src: *const F::Unit,
src_len: usize,
dst: *mut T::Unit,
dst_len: usize,
) -> usize {
let src = unsafe { slice::from_raw_parts(src, src_len) };
let dst = unsafe { slice::from_raw_parts_mut(dst, dst_len) };
transcode_into::<F, T>(src, dst, AsciiCase::Preserve).1
}
#[unsafe(no_mangle)]
#[inline(never)]
pub unsafe extern "C" fn xutf_utf8_to_utf16(src: *const u8, len: usize, dst: *mut u16) -> usize {
unsafe { transcode::<Utf8, Utf16>(src, len, dst, len + 16) }
}
#[unsafe(no_mangle)]
#[inline(never)]
pub unsafe extern "C" fn xutf_utf16_to_utf8(src: *const u16, len: usize, dst: *mut u8) -> usize {
unsafe { transcode::<Utf16, Utf8>(src, len, dst, len * 4 + 16) }
}
#[unsafe(no_mangle)]
#[inline(never)]
pub unsafe extern "C" fn xutf_utf8_to_utf32(src: *const u8, len: usize, dst: *mut u32) -> usize {
unsafe { transcode::<Utf8, Utf32>(src, len, dst, len + 16) }
}
#[unsafe(no_mangle)]
#[inline(never)]
pub unsafe extern "C" fn xutf_utf32_to_utf8(src: *const u32, len: usize, dst: *mut u8) -> usize {
unsafe { transcode::<Utf32, Utf8>(src, len, dst, len * 4 + 16) }
}
const fn main() {}