#![allow(unsafe_code)]
use std::alloc::{Layout, alloc, dealloc, handle_alloc_error};
use std::ptr::NonNull;
use std::sync::atomic::{AtomicU32, Ordering};
pub(crate) const INLINE_CAP: usize = 12;
const STATIC_TAG: u32 = 1 << 31;
const LEN_MASK: u32 = !STATIC_TAG;
#[repr(C)]
#[derive(Clone, Copy)]
struct InlineRepr {
len: u32,
data: [u8; INLINE_CAP],
}
#[repr(C)]
#[derive(Clone, Copy)]
struct PointerRepr {
len_with_tag: u32,
prefix: [u8; 4],
ptr: *const u8,
}
#[repr(C)]
pub(crate) union Repr {
inline: InlineRepr,
pointer: PointerRepr,
}
#[repr(C)]
struct HeapHeader {
refcount: AtomicU32,
}
fn heap_layout(len: usize) -> (Layout, usize) {
let header = Layout::new::<HeapHeader>();
let bytes = Layout::array::<u8>(len).expect("string length overflows Layout");
let (combined, offset) = header
.extend(bytes)
.expect("combined heap layout overflows");
(combined.pad_to_align(), offset)
}
fn alloc_heap(s: &str) -> NonNull<HeapHeader> {
let len = s.len();
let (layout, data_offset) = heap_layout(len);
let raw = unsafe { alloc(layout) };
let Some(raw) = NonNull::new(raw) else {
handle_alloc_error(layout);
};
unsafe {
raw.cast::<HeapHeader>().as_ptr().write(HeapHeader {
refcount: AtomicU32::new(1),
});
}
unsafe {
std::ptr::copy_nonoverlapping(s.as_ptr(), raw.as_ptr().add(data_offset), len);
}
raw.cast::<HeapHeader>()
}
unsafe fn retain_heap(ptr: NonNull<HeapHeader>) {
let header = unsafe { ptr.as_ref() };
header.refcount.fetch_add(1, Ordering::Relaxed);
}
unsafe fn drop_heap(ptr: NonNull<HeapHeader>, len: usize) {
let header = unsafe { ptr.as_ref() };
if header.refcount.fetch_sub(1, Ordering::AcqRel) == 1 {
let (layout, _) = heap_layout(len);
unsafe {
dealloc(ptr.as_ptr().cast::<u8>(), layout);
}
}
}
unsafe fn heap_bytes<'a>(ptr: NonNull<HeapHeader>, len: usize) -> &'a [u8] {
let (_, data_offset) = heap_layout(len);
unsafe { std::slice::from_raw_parts(ptr.as_ptr().cast::<u8>().add(data_offset), len) }
}
fn compute_prefix(bytes: &[u8]) -> [u8; 4] {
let mut out = [0u8; 4];
let n = bytes.len().min(4);
out[..n].copy_from_slice(&bytes[..n]);
out
}
impl Repr {
pub(crate) const fn empty() -> Self {
Self {
inline: InlineRepr {
len: 0,
data: [0; INLINE_CAP],
},
}
}
pub(crate) const fn from_static(s: &'static str) -> Self {
let bytes = s.as_bytes();
let len = bytes.len();
let prefix = [
if len > 0 { bytes[0] } else { 0 },
if len > 1 { bytes[1] } else { 0 },
if len > 2 { bytes[2] } else { 0 },
if len > 3 { bytes[3] } else { 0 },
];
Self {
pointer: PointerRepr {
len_with_tag: (len as u32) | STATIC_TAG,
prefix,
ptr: bytes.as_ptr(),
},
}
}
pub(crate) fn from_str(s: &str) -> Self {
let bytes = s.as_bytes();
let len = bytes.len();
if len <= INLINE_CAP {
let mut data = [0u8; INLINE_CAP];
data[..len].copy_from_slice(bytes);
Self {
inline: InlineRepr {
len: len as u32,
data,
},
}
} else {
let prefix = compute_prefix(bytes);
let ptr = alloc_heap(s);
Self {
pointer: PointerRepr {
len_with_tag: len as u32, prefix,
ptr: ptr.as_ptr().cast::<u8>(),
},
}
}
}
#[inline]
pub(crate) fn len(&self) -> usize {
let raw = unsafe { self.inline.len };
(raw & LEN_MASK) as usize
}
#[inline]
pub(crate) fn prefix(&self) -> [u8; 4] {
unsafe {
[
self.inline.data[0],
self.inline.data[1],
self.inline.data[2],
self.inline.data[3],
]
}
}
#[inline]
pub(crate) fn as_str(&self) -> &str {
let bytes = unsafe {
let raw_len = self.inline.len;
if raw_len & STATIC_TAG != 0 {
let len = (raw_len & LEN_MASK) as usize;
std::slice::from_raw_parts(self.pointer.ptr, len)
} else if (raw_len as usize) <= INLINE_CAP {
let len = raw_len as usize;
&self.inline.data[..len]
} else {
let len = raw_len as usize;
let header =
NonNull::new_unchecked(self.pointer.ptr.cast::<HeapHeader>().cast_mut());
heap_bytes(header, len)
}
};
unsafe { std::str::from_utf8_unchecked(bytes) }
}
}
impl Clone for Repr {
fn clone(&self) -> Self {
unsafe {
let raw_len = self.inline.len;
if raw_len & STATIC_TAG != 0 {
Self {
pointer: self.pointer,
}
} else if (raw_len as usize) <= INLINE_CAP {
Self {
inline: self.inline,
}
} else {
let header =
NonNull::new_unchecked(self.pointer.ptr.cast::<HeapHeader>().cast_mut());
retain_heap(header);
Self {
pointer: self.pointer,
}
}
}
}
}
impl Drop for Repr {
fn drop(&mut self) {
unsafe {
let raw_len = self.inline.len;
if raw_len & STATIC_TAG == 0 && (raw_len as usize) > INLINE_CAP {
let len = raw_len as usize;
let header =
NonNull::new_unchecked(self.pointer.ptr.cast::<HeapHeader>().cast_mut());
drop_heap(header, len);
}
}
}
}
unsafe impl Send for Repr {}
unsafe impl Sync for Repr {}
#[cfg(test)]
mod repr_tests {
use super::*;
#[test]
fn empty_is_inline() {
let r = Repr::empty();
assert_eq!(r.len(), 0);
assert_eq!(r.as_str(), "");
assert_eq!(r.prefix(), [0; 4]);
}
#[test]
fn short_string_uses_inline() {
let r = Repr::from_str("hi");
assert_eq!(r.len(), 2);
assert_eq!(r.as_str(), "hi");
assert_eq!(r.prefix(), *b"hi\0\0");
}
#[test]
fn boundary_string_inline_at_12_bytes() {
let r = Repr::from_str("abcdefghijkl"); assert_eq!(r.len(), 12);
assert_eq!(r.as_str(), "abcdefghijkl");
assert_eq!(r.prefix(), *b"abcd");
}
#[test]
fn heap_form_for_strings_over_12_bytes() {
let r = Repr::from_str("auth.login_attempt.v2"); assert_eq!(r.len(), 21);
assert_eq!(r.as_str(), "auth.login_attempt.v2");
assert_eq!(r.prefix(), *b"auth");
}
#[test]
fn static_form_short_string() {
let r = Repr::from_static("hi");
assert_eq!(r.len(), 2);
assert_eq!(r.as_str(), "hi");
assert_eq!(r.prefix(), *b"hi\0\0");
}
#[test]
fn static_form_long_string() {
let r = Repr::from_static("auth.login_attempt.v2");
assert_eq!(r.len(), 21);
assert_eq!(r.as_str(), "auth.login_attempt.v2");
assert_eq!(r.prefix(), *b"auth");
}
#[test]
fn clone_inline_is_independent() {
let r1 = Repr::from_str("hi");
let r2 = r1.clone();
assert_eq!(r1.as_str(), r2.as_str());
drop(r1);
assert_eq!(r2.as_str(), "hi");
}
#[test]
fn clone_heap_shares_buffer() {
let r1 = Repr::from_str("auth.login_attempt.v2");
let r2 = r1.clone();
let r3 = r1.clone();
assert_eq!(r1.as_str(), "auth.login_attempt.v2");
assert_eq!(r2.as_str(), "auth.login_attempt.v2");
assert_eq!(r3.as_str(), "auth.login_attempt.v2");
drop(r2);
assert_eq!(r1.as_str(), "auth.login_attempt.v2");
drop(r1);
assert_eq!(r3.as_str(), "auth.login_attempt.v2");
drop(r3);
}
#[test]
fn clone_static_is_pointer_copy() {
let r1 = Repr::from_static("auth.login_attempt.v2");
let r2 = r1.clone();
assert_eq!(r1.as_str(), r2.as_str());
}
#[test]
fn struct_size_is_16_bytes() {
assert_eq!(std::mem::size_of::<Repr>(), 16);
}
#[test]
fn long_heap_string_round_trips() {
let s = "a".repeat(10_000);
let r = Repr::from_str(&s);
assert_eq!(r.len(), 10_000);
assert_eq!(r.as_str(), s.as_str());
}
}