@@ -5,62 +5,15 @@ const TC_U32_OFFSET: u8 = 2;
55const TC_U32_VAROFFSET : u8 = 4 ;
66const TC_U32_EAT : u8 = 8 ;
77
8- #[ derive( Debug , PartialEq , Eq , Clone , Copy ) ]
9- #[ non_exhaustive]
10- pub enum TcU32SelectorFlag {
11- Terminal ,
12- Offset ,
13- VarOffset ,
14- Eat ,
15- Other ( u8 ) ,
16- }
17-
18- impl From < TcU32SelectorFlag > for u8 {
19- fn from ( v : TcU32SelectorFlag ) -> u8 {
20- match v {
21- TcU32SelectorFlag :: Terminal => TC_U32_TERMINAL ,
22- TcU32SelectorFlag :: Offset => TC_U32_OFFSET ,
23- TcU32SelectorFlag :: VarOffset => TC_U32_VAROFFSET ,
24- TcU32SelectorFlag :: Eat => TC_U32_EAT ,
25- TcU32SelectorFlag :: Other ( i) => i,
26- }
27- }
28- }
29-
30- const ALL_SELECTOR_FLAGS : [ TcU32SelectorFlag ; 4 ] = [
31- TcU32SelectorFlag :: Terminal ,
32- TcU32SelectorFlag :: Offset ,
33- TcU32SelectorFlag :: VarOffset ,
34- TcU32SelectorFlag :: Eat ,
35- ] ;
36-
37- #[ derive( Clone , Eq , PartialEq , Debug ) ]
38- pub ( crate ) struct VecTcU32SelectorFlag ( pub ( crate ) Vec < TcU32SelectorFlag > ) ;
39-
40- impl From < u8 > for VecTcU32SelectorFlag {
41- fn from ( d : u8 ) -> Self {
42- let mut got: u8 = 0 ;
43- let mut ret = Vec :: new ( ) ;
44- for flag in ALL_SELECTOR_FLAGS {
45- if ( d & ( u8:: from ( flag) ) ) > 0 {
46- ret. push ( flag) ;
47- got += u8:: from ( flag) ;
48- }
49- }
50- if got != d {
51- ret. push ( TcU32SelectorFlag :: Other ( d - got) ) ;
52- }
53- Self ( ret)
54- }
55- }
56-
57- impl From < & VecTcU32SelectorFlag > for u8 {
58- fn from ( v : & VecTcU32SelectorFlag ) -> u8 {
59- let mut d: u8 = 0 ;
60- for flag in & v. 0 {
61- d += u8:: from ( * flag) ;
62- }
63- d
8+ bitflags ! {
9+ #[ derive( Debug , Default , PartialEq , Eq , Clone , Copy ) ]
10+ #[ non_exhaustive]
11+ pub struct TcU32SelectorFlags : u8 {
12+ const Terminal = TC_U32_TERMINAL ;
13+ const Offset = TC_U32_OFFSET ;
14+ const VarOffset = TC_U32_VAROFFSET ;
15+ const Eat = TC_U32_EAT ;
16+ const _ = !0 ;
6417 }
6518}
6619
0 commit comments