@@ -26,8 +26,12 @@ pub enum Bits {
2626}
2727
2828impl Bits {
29- pub fn from_u8 ( input : u8 ) -> [ Bits ; 3 ] {
30- TABLE [ input as usize ]
29+ pub fn from_u8_msb_to_lsb ( input : u8 ) -> [ Bits ; 3 ] {
30+ MSB_TO_LSB [ input as usize ]
31+ }
32+
33+ pub fn from_u8_lsb_to_msb ( input : u8 ) -> [ Bits ; 3 ] {
34+ LSB_TO_MSB [ input as usize ]
3135 }
3236
3337 pub fn off ( state : u16 , rem : Rem ) -> Self {
@@ -60,7 +64,7 @@ impl Bits {
6064}
6165
6266#[ rustfmt:: skip]
63- const TABLE : [ [ Bits ; 3 ] ; 256 ] = {
67+ const MSB_TO_LSB : [ [ Bits ; 3 ] ; 256 ] = {
6468 use Bits :: * ;
6569 [
6670 [ B000 , B000 , B00 ] , [ B000 , B000 , B01 ] , [ B000 , B000 , B10 ] , [ B000 , B000 , B11 ] ,
@@ -129,3 +133,74 @@ const TABLE: [[Bits; 3]; 256] = {
129133 [ B111 , B111 , B00 ] , [ B111 , B111 , B01 ] , [ B111 , B111 , B10 ] , [ B111 , B111 , B11 ] ,
130134 ]
131135} ;
136+
137+ #[ rustfmt:: skip]
138+ const LSB_TO_MSB : [ [ Bits ; 3 ] ; 256 ] = {
139+ use Bits :: * ;
140+ [
141+ [ B000 , B000 , B00 ] , [ B100 , B000 , B00 ] , [ B010 , B000 , B00 ] , [ B110 , B000 , B00 ] ,
142+ [ B001 , B000 , B00 ] , [ B101 , B000 , B00 ] , [ B011 , B000 , B00 ] , [ B111 , B000 , B00 ] ,
143+ [ B000 , B100 , B00 ] , [ B100 , B100 , B00 ] , [ B010 , B100 , B00 ] , [ B110 , B100 , B00 ] ,
144+ [ B001 , B100 , B00 ] , [ B101 , B100 , B00 ] , [ B011 , B100 , B00 ] , [ B111 , B100 , B00 ] ,
145+ [ B000 , B010 , B00 ] , [ B100 , B010 , B00 ] , [ B010 , B010 , B00 ] , [ B110 , B010 , B00 ] ,
146+ [ B001 , B010 , B00 ] , [ B101 , B010 , B00 ] , [ B011 , B010 , B00 ] , [ B111 , B010 , B00 ] ,
147+ [ B000 , B110 , B00 ] , [ B100 , B110 , B00 ] , [ B010 , B110 , B00 ] , [ B110 , B110 , B00 ] ,
148+ [ B001 , B110 , B00 ] , [ B101 , B110 , B00 ] , [ B011 , B110 , B00 ] , [ B111 , B110 , B00 ] ,
149+ [ B000 , B001 , B00 ] , [ B100 , B001 , B00 ] , [ B010 , B001 , B00 ] , [ B110 , B001 , B00 ] ,
150+ [ B001 , B001 , B00 ] , [ B101 , B001 , B00 ] , [ B011 , B001 , B00 ] , [ B111 , B001 , B00 ] ,
151+ [ B000 , B101 , B00 ] , [ B100 , B101 , B00 ] , [ B010 , B101 , B00 ] , [ B110 , B101 , B00 ] ,
152+ [ B001 , B101 , B00 ] , [ B101 , B101 , B00 ] , [ B011 , B101 , B00 ] , [ B111 , B101 , B00 ] ,
153+ [ B000 , B011 , B00 ] , [ B100 , B011 , B00 ] , [ B010 , B011 , B00 ] , [ B110 , B011 , B00 ] ,
154+ [ B001 , B011 , B00 ] , [ B101 , B011 , B00 ] , [ B011 , B011 , B00 ] , [ B111 , B011 , B00 ] ,
155+ [ B000 , B111 , B00 ] , [ B100 , B111 , B00 ] , [ B010 , B111 , B00 ] , [ B110 , B111 , B00 ] ,
156+ [ B001 , B111 , B00 ] , [ B101 , B111 , B00 ] , [ B011 , B111 , B00 ] , [ B111 , B111 , B00 ] ,
157+ [ B000 , B000 , B10 ] , [ B100 , B000 , B10 ] , [ B010 , B000 , B10 ] , [ B110 , B000 , B10 ] ,
158+ [ B001 , B000 , B10 ] , [ B101 , B000 , B10 ] , [ B011 , B000 , B10 ] , [ B111 , B000 , B10 ] ,
159+ [ B000 , B100 , B10 ] , [ B100 , B100 , B10 ] , [ B010 , B100 , B10 ] , [ B110 , B100 , B10 ] ,
160+ [ B001 , B100 , B10 ] , [ B101 , B100 , B10 ] , [ B011 , B100 , B10 ] , [ B111 , B100 , B10 ] ,
161+ [ B000 , B010 , B10 ] , [ B100 , B010 , B10 ] , [ B010 , B010 , B10 ] , [ B110 , B010 , B10 ] ,
162+ [ B001 , B010 , B10 ] , [ B101 , B010 , B10 ] , [ B011 , B010 , B10 ] , [ B111 , B010 , B10 ] ,
163+ [ B000 , B110 , B10 ] , [ B100 , B110 , B10 ] , [ B010 , B110 , B10 ] , [ B110 , B110 , B10 ] ,
164+ [ B001 , B110 , B10 ] , [ B101 , B110 , B10 ] , [ B011 , B110 , B10 ] , [ B111 , B110 , B10 ] ,
165+ [ B000 , B001 , B10 ] , [ B100 , B001 , B10 ] , [ B010 , B001 , B10 ] , [ B110 , B001 , B10 ] ,
166+ [ B001 , B001 , B10 ] , [ B101 , B001 , B10 ] , [ B011 , B001 , B10 ] , [ B111 , B001 , B10 ] ,
167+ [ B000 , B101 , B10 ] , [ B100 , B101 , B10 ] , [ B010 , B101 , B10 ] , [ B110 , B101 , B10 ] ,
168+ [ B001 , B101 , B10 ] , [ B101 , B101 , B10 ] , [ B011 , B101 , B10 ] , [ B111 , B101 , B10 ] ,
169+ [ B000 , B011 , B10 ] , [ B100 , B011 , B10 ] , [ B010 , B011 , B10 ] , [ B110 , B011 , B10 ] ,
170+ [ B001 , B011 , B10 ] , [ B101 , B011 , B10 ] , [ B011 , B011 , B10 ] , [ B111 , B011 , B10 ] ,
171+ [ B000 , B111 , B10 ] , [ B100 , B111 , B10 ] , [ B010 , B111 , B10 ] , [ B110 , B111 , B10 ] ,
172+ [ B001 , B111 , B10 ] , [ B101 , B111 , B10 ] , [ B011 , B111 , B10 ] , [ B111 , B111 , B10 ] ,
173+ [ B000 , B000 , B01 ] , [ B100 , B000 , B01 ] , [ B010 , B000 , B01 ] , [ B110 , B000 , B01 ] ,
174+ [ B001 , B000 , B01 ] , [ B101 , B000 , B01 ] , [ B011 , B000 , B01 ] , [ B111 , B000 , B01 ] ,
175+ [ B000 , B100 , B01 ] , [ B100 , B100 , B01 ] , [ B010 , B100 , B01 ] , [ B110 , B100 , B01 ] ,
176+ [ B001 , B100 , B01 ] , [ B101 , B100 , B01 ] , [ B011 , B100 , B01 ] , [ B111 , B100 , B01 ] ,
177+ [ B000 , B010 , B01 ] , [ B100 , B010 , B01 ] , [ B010 , B010 , B01 ] , [ B110 , B010 , B01 ] ,
178+ [ B001 , B010 , B01 ] , [ B101 , B010 , B01 ] , [ B011 , B010 , B01 ] , [ B111 , B010 , B01 ] ,
179+ [ B000 , B110 , B01 ] , [ B100 , B110 , B01 ] , [ B010 , B110 , B01 ] , [ B110 , B110 , B01 ] ,
180+ [ B001 , B110 , B01 ] , [ B101 , B110 , B01 ] , [ B011 , B110 , B01 ] , [ B111 , B110 , B01 ] ,
181+ [ B000 , B001 , B01 ] , [ B100 , B001 , B01 ] , [ B010 , B001 , B01 ] , [ B110 , B001 , B01 ] ,
182+ [ B001 , B001 , B01 ] , [ B101 , B001 , B01 ] , [ B011 , B001 , B01 ] , [ B111 , B001 , B01 ] ,
183+ [ B000 , B101 , B01 ] , [ B100 , B101 , B01 ] , [ B010 , B101 , B01 ] , [ B110 , B101 , B01 ] ,
184+ [ B001 , B101 , B01 ] , [ B101 , B101 , B01 ] , [ B011 , B101 , B01 ] , [ B111 , B101 , B01 ] ,
185+ [ B000 , B011 , B01 ] , [ B100 , B011 , B01 ] , [ B010 , B011 , B01 ] , [ B110 , B011 , B01 ] ,
186+ [ B001 , B011 , B01 ] , [ B101 , B011 , B01 ] , [ B011 , B011 , B01 ] , [ B111 , B011 , B01 ] ,
187+ [ B000 , B111 , B01 ] , [ B100 , B111 , B01 ] , [ B010 , B111 , B01 ] , [ B110 , B111 , B01 ] ,
188+ [ B001 , B111 , B01 ] , [ B101 , B111 , B01 ] , [ B011 , B111 , B01 ] , [ B111 , B111 , B01 ] ,
189+ [ B000 , B000 , B11 ] , [ B100 , B000 , B11 ] , [ B010 , B000 , B11 ] , [ B110 , B000 , B11 ] ,
190+ [ B001 , B000 , B11 ] , [ B101 , B000 , B11 ] , [ B011 , B000 , B11 ] , [ B111 , B000 , B11 ] ,
191+ [ B000 , B100 , B11 ] , [ B100 , B100 , B11 ] , [ B010 , B100 , B11 ] , [ B110 , B100 , B11 ] ,
192+ [ B001 , B100 , B11 ] , [ B101 , B100 , B11 ] , [ B011 , B100 , B11 ] , [ B111 , B100 , B11 ] ,
193+ [ B000 , B010 , B11 ] , [ B100 , B010 , B11 ] , [ B010 , B010 , B11 ] , [ B110 , B010 , B11 ] ,
194+ [ B001 , B010 , B11 ] , [ B101 , B010 , B11 ] , [ B011 , B010 , B11 ] , [ B111 , B010 , B11 ] ,
195+ [ B000 , B110 , B11 ] , [ B100 , B110 , B11 ] , [ B010 , B110 , B11 ] , [ B110 , B110 , B11 ] ,
196+ [ B001 , B110 , B11 ] , [ B101 , B110 , B11 ] , [ B011 , B110 , B11 ] , [ B111 , B110 , B11 ] ,
197+ [ B000 , B001 , B11 ] , [ B100 , B001 , B11 ] , [ B010 , B001 , B11 ] , [ B110 , B001 , B11 ] ,
198+ [ B001 , B001 , B11 ] , [ B101 , B001 , B11 ] , [ B011 , B001 , B11 ] , [ B111 , B001 , B11 ] ,
199+ [ B000 , B101 , B11 ] , [ B100 , B101 , B11 ] , [ B010 , B101 , B11 ] , [ B110 , B101 , B11 ] ,
200+ [ B001 , B101 , B11 ] , [ B101 , B101 , B11 ] , [ B011 , B101 , B11 ] , [ B111 , B101 , B11 ] ,
201+ [ B000 , B011 , B11 ] , [ B100 , B011 , B11 ] , [ B010 , B011 , B11 ] , [ B110 , B011 , B11 ] ,
202+ [ B001 , B011 , B11 ] , [ B101 , B011 , B11 ] , [ B011 , B011 , B11 ] , [ B111 , B011 , B11 ] ,
203+ [ B000 , B111 , B11 ] , [ B100 , B111 , B11 ] , [ B010 , B111 , B11 ] , [ B110 , B111 , B11 ] ,
204+ [ B001 , B111 , B11 ] , [ B101 , B111 , B11 ] , [ B011 , B111 , B11 ] , [ B111 , B111 , B11 ] ,
205+ ]
206+ } ;
0 commit comments