use super::prefix_code::PrefixCode;
pub(crate) struct EntropyCode<'a> {
pub(crate) context_map: &'a [u8],
pub(crate) num_contexts: usize,
pub(crate) prefix_codes: &'a [PrefixCode],
#[allow(unused)]
pub(crate) num_prefix_codes: usize,
pub(crate) orig_context_map: Option<&'a [u8]>,
pub(crate) orig_num_contexts: usize,
}
impl<'a> EntropyCode<'a> {
pub(crate) fn new(context_map: &'a [u8], prefix_codes: &'a [PrefixCode]) -> Self {
Self {
context_map,
num_contexts: context_map.len(),
prefix_codes,
num_prefix_codes: prefix_codes.len(),
orig_context_map: None,
orig_num_contexts: 0,
}
}
}
pub(crate) struct OwnedEntropyCode {
pub(crate) context_map: Vec<u8>,
pub(crate) prefix_codes: Vec<PrefixCode>,
pub(crate) orig_context_map: Option<Vec<u8>>,
pub(crate) orig_num_contexts: usize,
}
impl OwnedEntropyCode {
pub(crate) fn as_ref(&self) -> EntropyCode<'_> {
EntropyCode {
context_map: &self.context_map,
num_contexts: self.context_map.len(),
prefix_codes: &self.prefix_codes,
num_prefix_codes: self.prefix_codes.len(),
orig_context_map: self.orig_context_map.as_deref(),
orig_num_contexts: self.orig_num_contexts,
}
}
}