use std::fmt::Debug;
use std::mem::MaybeUninit;
#[derive(Copy, Clone, Debug, PartialEq)]
pub(crate) enum ChromaSamplePosition {
Unknown,
Vertical,
Colocated,
}
impl Default for ChromaSamplePosition {
fn default() -> Self {
ChromaSamplePosition::Unknown
}
}
#[derive(Clone, Copy, Debug)]
pub struct Rational {
pub num: u64,
pub den: u64,
}
impl Rational {
pub const fn new(num: u64, den: u64) -> Self {
Rational { num, den }
}
}
#[repr(align(32))]
pub struct Align32;
pub struct AlignedArray<ARRAY> {
_alignment: [Align32; 0],
pub array: ARRAY,
}
impl<A> AlignedArray<A> {
pub const fn new(array: A) -> Self {
AlignedArray {
_alignment: [],
array,
}
}
#[allow(clippy::uninit_assumed_init)]
pub fn uninitialized() -> Self {
Self::new(unsafe { MaybeUninit::uninit().assume_init() })
}
}
#[test]
fn sanity() {
fn is_aligned<T>(ptr: *const T, n: usize) -> bool {
((ptr as usize) & ((1 << n) - 1)) == 0
}
let a: AlignedArray<_> = AlignedArray::new([0u8; 3]);
assert!(is_aligned(a.array.as_ptr(), 4));
}