dsi_bitstream/codes/
params.rs1use crate::codes::*;
43use crate::impls::*;
44use crate::traits::*;
45use common_traits::*;
46#[cfg(feature = "mem_dbg")]
47use mem_dbg::{MemDbg, MemSize};
48use std::error::Error;
49
50pub trait ReadParams {}
56
57#[derive(Debug, Clone)]
63#[cfg_attr(feature = "mem_dbg", derive(MemDbg, MemSize))]
64pub struct DefaultReadParams;
65impl ReadParams for DefaultReadParams {}
66
67macro_rules! impl_default_read_codes {
68 ($($endianess:ident),*) => {$(
69 impl<WR: WordRead> GammaRead<$endianess>
70 for BufBitReader<$endianess, WR, DefaultReadParams>
71 where
72 WR:: Word: DoubleType + UpcastableInto<u64>,
73 <WR::Word as DoubleType>::DoubleType: CastableInto<u64>,
74 {
75 #[inline(always)]
76 fn read_gamma(&mut self) -> Result<u64, Self::Error> {
77 self.read_gamma_param::<false>()
80 }
81 }
82
83 impl<WR: WordRead> DeltaRead<$endianess>
84 for BufBitReader<$endianess, WR, DefaultReadParams>
85 where
86 WR:: Word: DoubleType + UpcastableInto<u64>,
87 <WR::Word as DoubleType>::DoubleType: CastableInto<u64>,
88 {
89 #[inline(always)]
90 fn read_delta(&mut self) -> Result<u64, Self::Error> {
91 self.read_delta_param::<false, true>()
92 }
93 }
94
95 impl<WR: WordRead> ZetaRead<$endianess>
96 for BufBitReader<$endianess, WR, DefaultReadParams>
97 where
98 WR:: Word: DoubleType + UpcastableInto<u64>,
99 <WR::Word as DoubleType>::DoubleType: CastableInto<u64>,
100 {
101 #[inline(always)]
102 fn read_zeta(&mut self, k: usize) -> Result<u64, Self::Error> {
103 self.read_zeta_param(k)
104 }
105
106 #[inline(always)]
107 fn read_zeta3(&mut self) -> Result<u64, Self::Error> {
108 self.read_zeta3_param::<true>()
109 }
110 }
111
112 impl<E: Error + Send + Sync + 'static, WR: WordRead<Error = E, Word = u64> + WordSeek<Error = E>> GammaRead<$endianess>
113 for BitReader<$endianess, WR, DefaultReadParams>
114 where
115 WR:: Word: DoubleType + UpcastableInto<u64>,
116 <WR::Word as DoubleType>::DoubleType: CastableInto<u64>,
117 {
118 #[inline(always)]
119 fn read_gamma(&mut self) -> Result<u64, Self::Error> {
120 self.read_gamma_param::<false>()
123 }
124 }
125
126 impl<E: Error + Send + Sync + 'static, WR: WordRead<Error = E, Word = u64> + WordSeek<Error = E>> DeltaRead<$endianess>
127 for BitReader<$endianess, WR, DefaultReadParams>
128 where
129 WR:: Word: DoubleType + UpcastableInto<u64>,
130 <WR::Word as DoubleType>::DoubleType: CastableInto<u64>,
131 {
132 #[inline(always)]
133 fn read_delta(&mut self) -> Result<u64, Self::Error> {
134 self.read_delta_param::<false, true>()
135 }
136 }
137
138 impl<E: Error + Send + Sync + 'static, WR: WordRead<Error = E, Word = u64> + WordSeek<Error = E>> ZetaRead<$endianess>
139 for BitReader<$endianess, WR, DefaultReadParams>
140 where
141 WR:: Word: DoubleType + UpcastableInto<u64>,
142 <WR::Word as DoubleType>::DoubleType: CastableInto<u64>,
143 {
144 #[inline(always)]
145 fn read_zeta(&mut self, k: usize) -> Result<u64, Self::Error> {
146 self.read_zeta_param(k)
147 }
148
149 #[inline(always)]
150 fn read_zeta3(&mut self) -> Result<u64, Self::Error> {
151 self.read_zeta3_param::<true>()
152 }
153 }
154 )*};
155}
156
157impl_default_read_codes! {LittleEndian, BigEndian}
158
159pub trait WriteParams {}
165
166#[derive(Debug, Clone)]
172#[cfg_attr(feature = "mem_dbg", derive(MemDbg, MemSize))]
173pub struct DefaultWriteParams;
174impl WriteParams for DefaultWriteParams {}
175
176macro_rules! impl_default_write_codes {
177 ($($endianess:ident),*) => {$(
178 impl<WR: WordWrite> GammaWrite<$endianess>
179 for BufBitWriter<$endianess, WR, DefaultWriteParams>
180 where u64: CastableInto<WR::Word>,
181 {
182 #[inline(always)]
183 fn write_gamma(&mut self, value: u64) -> Result<usize, Self::Error> {
184 self.write_gamma_param::<true>(value)
185 }
186 }
187
188 impl<WR: WordWrite, DC: WriteParams> DeltaWrite<$endianess>
189 for BufBitWriter<$endianess, WR, DC>
190 where u64: CastableInto<WR::Word>,
191 {
192 #[inline(always)]
193 fn write_delta(&mut self, value: u64) -> Result<usize, Self::Error> {
194 self.write_delta_param::<true, true>(value)
195 }
196 }
197
198 impl<WR: WordWrite, DC: WriteParams> ZetaWrite<$endianess>
199 for BufBitWriter<$endianess, WR, DC>
200 where u64: CastableInto<WR::Word>,
201 {
202 #[inline(always)]
203 fn write_zeta(&mut self, value: u64, k: usize) -> Result<usize, Self::Error> {
204 self.write_zeta_param::<true>(value, k)
205 }
206
207 #[inline(always)]
208 fn write_zeta3(&mut self, value: u64) -> Result<usize, Self::Error> {
209 self.write_zeta3_param::<true>(value)
210 }
211 }
212
213 )*};
214}
215
216impl_default_write_codes! {LittleEndian, BigEndian}