pub enum Portable {}
pub enum Native {}
pub enum Frozen {}
impl Frozen {
pub const REQUIRED_ALIGNMENT: usize = 32;
}
mod private {
use crate::{Native, Portable};
#[allow(unused)]
pub trait NoAlign: crate::sealed::Sealed {}
impl NoAlign for Native {}
impl NoAlign for Portable {}
}
#[allow(unused)]
pub(crate) use private::NoAlign;
pub enum JvmLegacy {}
#[cfg(feature = "alloc")]
pub(crate) fn get_aligned_spare_capacity(
dst: &mut alloc::vec::Vec<u8>,
align: usize,
required_len: usize,
) -> &mut [core::mem::MaybeUninit<u8>] {
let max_padding = align - 1;
let extra_align_required =
|v: &mut alloc::vec::Vec<u8>| v.spare_capacity_mut().as_ptr().align_offset(align);
let mut extra_offset = extra_align_required(dst);
if dst.spare_capacity_mut().len() < required_len + extra_offset {
dst.reserve(required_len.checked_add(max_padding).unwrap());
extra_offset = extra_align_required(dst);
}
let mut data_start = dst.len();
if extra_offset != 0 {
data_start = data_start.checked_add(extra_offset).unwrap();
dst.resize(data_start, 0);
}
debug_assert_eq!(dst.len(), data_start);
let spare_capacity = dst.spare_capacity_mut();
debug_assert!(spare_capacity.len() >= required_len);
debug_assert_eq!(spare_capacity.as_ptr().align_offset(align), 0);
&mut spare_capacity[..required_len]
}