@@ -6,8 +6,8 @@ use core::sync::atomic::{AtomicU32, Ordering};
6
6
/// to combine multiple flags in one value.
7
7
#[ derive( Debug , Clone , Copy , PartialEq , Eq ) ]
8
8
#[ repr( transparent) ]
9
- pub struct ProcessFlag ( u32 ) ;
10
- impl ProcessFlag {
9
+ pub struct ProcessFlags ( u32 ) ;
10
+ impl ProcessFlags {
11
11
#![ allow( non_upper_case_globals) ]
12
12
13
13
/// The default value where no flags are set
@@ -27,89 +27,89 @@ impl ProcessFlag {
27
27
// Internal value used to validate conversions from raw u32 values
28
28
const MAX_VALUE : u32 = 1 << 5 ;
29
29
}
30
- impl Into < u32 > for ProcessFlag {
30
+ impl Into < u32 > for ProcessFlags {
31
31
#[ inline]
32
32
fn into ( self ) -> u32 {
33
33
self . 0
34
34
}
35
35
}
36
- impl From < u32 > for ProcessFlag {
36
+ impl From < u32 > for ProcessFlags {
37
37
#[ inline]
38
38
fn from ( n : u32 ) -> Self {
39
39
assert ! ( n <= Self :: MAX_VALUE ) ;
40
40
Self ( n)
41
41
}
42
42
}
43
- impl Not for ProcessFlag {
43
+ impl Not for ProcessFlags {
44
44
type Output = Self ;
45
45
46
46
fn not ( self ) -> Self {
47
47
Self ( !self . 0 )
48
48
}
49
49
}
50
- impl BitOr for ProcessFlag {
50
+ impl BitOr for ProcessFlags {
51
51
type Output = Self ;
52
52
53
53
fn bitor ( self , rhs : Self ) -> Self {
54
54
Self ( self . 0 | rhs. 0 )
55
55
}
56
56
}
57
- impl BitOrAssign for ProcessFlag {
57
+ impl BitOrAssign for ProcessFlags {
58
58
fn bitor_assign ( & mut self , rhs : Self ) {
59
59
self . 0 |= rhs. 0
60
60
}
61
61
}
62
- impl BitAnd for ProcessFlag {
62
+ impl BitAnd for ProcessFlags {
63
63
type Output = Self ;
64
64
65
65
fn bitand ( self , rhs : Self ) -> Self {
66
66
Self ( self . 0 & rhs. 0 )
67
67
}
68
68
}
69
- impl BitAndAssign for ProcessFlag {
69
+ impl BitAndAssign for ProcessFlags {
70
70
fn bitand_assign ( & mut self , rhs : Self ) {
71
71
self . 0 &= rhs. 0
72
72
}
73
73
}
74
74
75
75
/// This type is a wrapper around `AtomicU32` and provides atomic
76
- /// semantics for the `ProcessFlag ` enum type
76
+ /// semantics for the `ProcessFlags ` enum type
77
77
#[ repr( transparent) ]
78
- pub struct AtomicProcessFlag ( AtomicU32 ) ;
79
- impl AtomicProcessFlag {
80
- /// Create a new `AtomicProcessFlag `
78
+ pub struct AtomicProcessFlags ( AtomicU32 ) ;
79
+ impl AtomicProcessFlags {
80
+ /// Create a new `AtomicProcessFlags `
81
81
#[ inline]
82
- pub fn new ( flag : ProcessFlag ) -> Self {
82
+ pub fn new ( flag : ProcessFlags ) -> Self {
83
83
Self ( AtomicU32 :: new ( flag. into ( ) ) )
84
84
}
85
85
86
86
/// Fetch the current value, with the given `Ordering`
87
87
#[ inline]
88
- pub fn load ( & self , ordering : Ordering ) -> ProcessFlag {
88
+ pub fn load ( & self , ordering : Ordering ) -> ProcessFlags {
89
89
self . 0 . load ( ordering) . into ( )
90
90
}
91
91
92
92
/// Fetch the current value, using `Relaxed` ordering
93
93
#[ inline]
94
- pub fn get ( & self ) -> ProcessFlag {
94
+ pub fn get ( & self ) -> ProcessFlags {
95
95
self . 0 . load ( Ordering :: Relaxed ) . into ( )
96
96
}
97
97
98
98
/// Check if the current value contains the given flags, uses `Relaxed` ordering
99
99
#[ inline]
100
- pub fn is_set ( & self , flags : ProcessFlag ) -> bool {
100
+ pub fn are_set ( & self , flags : ProcessFlags ) -> bool {
101
101
self . get ( ) & flags == flags
102
102
}
103
103
104
104
/// Set the given flags, uses `AcqRel` ordering
105
105
#[ inline]
106
- pub fn set ( & self , flags : ProcessFlag ) -> ProcessFlag {
106
+ pub fn set ( & self , flags : ProcessFlags ) -> ProcessFlags {
107
107
self . 0 . fetch_or ( flags. into ( ) , Ordering :: AcqRel ) . into ( )
108
108
}
109
109
110
110
/// Clear the given flags, uses `AcqRel` ordering
111
111
#[ inline]
112
- pub fn clear ( & self , flags : ProcessFlag ) -> ProcessFlag {
112
+ pub fn clear ( & self , flags : ProcessFlags ) -> ProcessFlags {
113
113
let cleared = !flags;
114
114
self . 0 . fetch_and ( cleared. into ( ) , Ordering :: AcqRel ) . into ( )
115
115
}
@@ -121,34 +121,34 @@ mod tests {
121
121
122
122
#[ test]
123
123
fn process_flag_test ( ) {
124
- let mut flags = ProcessFlag :: Default ;
124
+ let mut flags = ProcessFlags :: Default ;
125
125
// Set fullsweep
126
- flags |= ProcessFlag :: NeedFullSweep ;
127
- assert ! ( flags & ProcessFlag :: NeedFullSweep == ProcessFlag :: NeedFullSweep ) ;
126
+ flags |= ProcessFlags :: NeedFullSweep ;
127
+ assert ! ( flags & ProcessFlags :: NeedFullSweep == ProcessFlags :: NeedFullSweep ) ;
128
128
// Set force_gc
129
- flags |= ProcessFlag :: ForceGC ;
130
- assert ! ( flags & ProcessFlag :: NeedFullSweep == ProcessFlag :: NeedFullSweep ) ;
131
- assert ! ( flags & ProcessFlag :: ForceGC == ProcessFlag :: ForceGC ) ;
129
+ flags |= ProcessFlags :: ForceGC ;
130
+ assert ! ( flags & ProcessFlags :: NeedFullSweep == ProcessFlags :: NeedFullSweep ) ;
131
+ assert ! ( flags & ProcessFlags :: ForceGC == ProcessFlags :: ForceGC ) ;
132
132
// Ensure we can check multiple flags at once
133
- let checking = ProcessFlag :: ForceGC | ProcessFlag :: NeedFullSweep ;
133
+ let checking = ProcessFlags :: ForceGC | ProcessFlags :: NeedFullSweep ;
134
134
assert ! ( flags & checking == checking) ;
135
135
// Clear force_gc
136
- flags &= !ProcessFlag :: ForceGC ;
137
- assert ! ( flags & ProcessFlag :: ForceGC != ProcessFlag :: ForceGC ) ;
138
- assert ! ( flags & ProcessFlag :: NeedFullSweep == ProcessFlag :: NeedFullSweep ) ;
136
+ flags &= !ProcessFlags :: ForceGC ;
137
+ assert ! ( flags & ProcessFlags :: ForceGC != ProcessFlags :: ForceGC ) ;
138
+ assert ! ( flags & ProcessFlags :: NeedFullSweep == ProcessFlags :: NeedFullSweep ) ;
139
139
}
140
140
141
141
#[ test]
142
142
fn atomic_process_flag_test ( ) {
143
- let flags = AtomicProcessFlag :: new ( ProcessFlag :: Default ) ;
144
- flags. set ( ProcessFlag :: NeedFullSweep ) ;
145
- assert ! ( flags. is_set ( ProcessFlag :: NeedFullSweep ) ) ;
146
- flags. set ( ProcessFlag :: ForceGC ) ;
147
- assert ! ( flags. is_set ( ProcessFlag :: NeedFullSweep ) ) ;
148
- assert ! ( flags. is_set ( ProcessFlag :: ForceGC ) ) ;
149
- assert ! ( flags. is_set ( ProcessFlag :: ForceGC | ProcessFlag :: NeedFullSweep ) ) ;
150
- flags. clear ( ProcessFlag :: ForceGC ) ;
151
- assert ! ( flags. is_set ( ProcessFlag :: NeedFullSweep ) ) ;
152
- assert ! ( !flags. is_set ( ProcessFlag :: ForceGC ) ) ;
143
+ let flags = AtomicProcessFlags :: new ( ProcessFlags :: Default ) ;
144
+ flags. set ( ProcessFlags :: NeedFullSweep ) ;
145
+ assert ! ( flags. are_set ( ProcessFlags :: NeedFullSweep ) ) ;
146
+ flags. set ( ProcessFlags :: ForceGC ) ;
147
+ assert ! ( flags. are_set ( ProcessFlags :: NeedFullSweep ) ) ;
148
+ assert ! ( flags. are_set ( ProcessFlags :: ForceGC ) ) ;
149
+ assert ! ( flags. are_set ( ProcessFlags :: ForceGC | ProcessFlags :: NeedFullSweep ) ) ;
150
+ flags. clear ( ProcessFlags :: ForceGC ) ;
151
+ assert ! ( flags. are_set ( ProcessFlags :: NeedFullSweep ) ) ;
152
+ assert ! ( !flags. are_set ( ProcessFlags :: ForceGC ) ) ;
153
153
}
154
154
}
0 commit comments