#[macro_export]
macro_rules! fixed_vec {
() => {
$crate::fixed::FixedVec::builder().build(&[]).unwrap()
};
($($elem:expr),+ $(,)?) => {
$crate::fixed::macros::from_slice(&[$($elem),+])
};
($elem:expr; $len:expr) => {
$crate::fixed::macros::from_repetition($elem, $len)
};
}
#[macro_export]
macro_rules! sfixed_vec {
() => {
$crate::fixed::FixedVec::<i64, usize, dsi_bitstream::prelude::LE>::builder()
.build(&[])
.unwrap()
};
($($elem:expr),+ $(,)?) => {
$crate::fixed::macros::from_slice(&[$($elem as i64),+])
};
($elem:expr; $len:expr) => {
$crate::fixed::macros::from_repetition($elem as i64, $len)
};
}
use crate::fixed::{
builder::FixedVecBuilder,
traits::{DefaultParams, Storable, Word},
BitWidth, FixedVec,
};
use dsi_bitstream::prelude::Endianness;
use num_traits::ToPrimitive;
#[doc(hidden)]
pub fn from_slice<T>(slice: &[T]) -> FixedVec<T, <T as DefaultParams>::W, <T as DefaultParams>::E>
where
T: DefaultParams + Storable<<T as DefaultParams>::W> + ToPrimitive,
<T as DefaultParams>::W: Word,
<T as DefaultParams>::E: Endianness,
FixedVecBuilder<T, <T as DefaultParams>::W, <T as DefaultParams>::E>: Default,
for<'a> dsi_bitstream::impls::BufBitWriter<
<T as DefaultParams>::E,
dsi_bitstream::impls::MemWordWriterVec<
<T as DefaultParams>::W,
Vec<<T as DefaultParams>::W>,
>,
>: dsi_bitstream::prelude::BitWrite<<T as DefaultParams>::E, Error = std::convert::Infallible>,
{
FixedVec::<T, <T as DefaultParams>::W, <T as DefaultParams>::E>::builder()
.bit_width(BitWidth::Minimal)
.build(slice)
.unwrap()
}
#[doc(hidden)]
pub fn from_repetition<T>(
elem: T,
len: usize,
) -> FixedVec<T, <T as DefaultParams>::W, <T as DefaultParams>::E>
where
T: DefaultParams + Storable<<T as DefaultParams>::W> + ToPrimitive + Clone,
<T as DefaultParams>::W: Word,
<T as DefaultParams>::E: Endianness,
FixedVecBuilder<T, <T as DefaultParams>::W, <T as DefaultParams>::E>: Default,
for<'a> dsi_bitstream::impls::BufBitWriter<
<T as DefaultParams>::E,
dsi_bitstream::impls::MemWordWriterVec<
<T as DefaultParams>::W,
Vec<<T as DefaultParams>::W>,
>,
>: dsi_bitstream::prelude::BitWrite<<T as DefaultParams>::E, Error = std::convert::Infallible>,
{
let mut v = Vec::new();
v.resize(len, elem);
FixedVec::<T, <T as DefaultParams>::W, <T as DefaultParams>::E>::builder()
.bit_width(BitWidth::Minimal)
.build(&v)
.unwrap()
}