/rust/registry/src/index.crates.io-1949cf8c6b5b557f/bitflags-2.13.0/src/public.rs
Line | Count | Source |
1 | | //! Generate the user-facing flags type. |
2 | | //! |
3 | | //! The code here belongs to the end-user, so new trait implementations and methods can't be |
4 | | //! added without potentially breaking users. |
5 | | |
6 | | /// Declare the user-facing bitflags struct. |
7 | | /// |
8 | | /// This type is guaranteed to be a newtype with a `bitflags`-facing type as its single field. |
9 | | #[macro_export] |
10 | | #[doc(hidden)] |
11 | | macro_rules! __declare_public_bitflags { |
12 | | ( |
13 | | $(#[$outer:meta])* |
14 | | $vis:vis struct $PublicBitFlags:ident |
15 | | ) => { |
16 | | $(#[$outer])* |
17 | | $vis struct $PublicBitFlags(<$PublicBitFlags as $crate::__private::PublicFlags>::Internal); |
18 | | }; |
19 | | } |
20 | | |
21 | | /// Implement functions on the public (user-facing) bitflags type. |
22 | | /// |
23 | | /// We need to be careful about adding new methods and trait implementations here because they |
24 | | /// could conflict with items added by the end-user. |
25 | | #[macro_export] |
26 | | #[doc(hidden)] |
27 | | macro_rules! __impl_public_bitflags_forward { |
28 | | ( |
29 | | $(#[$outer:meta])* |
30 | | $PublicBitFlags:ident: $T:ty, $InternalBitFlags:ident |
31 | | ) => { |
32 | | $crate::__impl_bitflags! { |
33 | | params: self, bits, name, other, value; |
34 | | $(#[$outer])* |
35 | | $PublicBitFlags: $T { |
36 | | fn empty() { |
37 | | Self($InternalBitFlags::empty()) |
38 | | } |
39 | | |
40 | | fn all() { |
41 | | Self($InternalBitFlags::all()) |
42 | | } |
43 | | |
44 | 0 | fn bits(&self) { |
45 | 0 | self.0.bits() |
46 | | } |
47 | | |
48 | | fn from_bits(bits) { |
49 | | match $InternalBitFlags::from_bits(bits) { |
50 | | $crate::__private::core::option::Option::Some(bits) => $crate::__private::core::option::Option::Some(Self(bits)), |
51 | | $crate::__private::core::option::Option::None => $crate::__private::core::option::Option::None, |
52 | | } |
53 | | } |
54 | | |
55 | | fn from_bits_truncate(bits) { |
56 | | Self($InternalBitFlags::from_bits_truncate(bits)) |
57 | | } |
58 | | |
59 | 0 | fn from_bits_retain(bits) { |
60 | 0 | Self($InternalBitFlags::from_bits_retain(bits)) |
61 | | } |
62 | | |
63 | | fn from_name(name) { |
64 | | match $InternalBitFlags::from_name(name) { |
65 | | $crate::__private::core::option::Option::Some(bits) => $crate::__private::core::option::Option::Some(Self(bits)), |
66 | | $crate::__private::core::option::Option::None => $crate::__private::core::option::Option::None, |
67 | | } |
68 | | } |
69 | | |
70 | | fn is_empty(&self) { |
71 | | self.0.is_empty() |
72 | | } |
73 | | |
74 | | fn is_all(&self) { |
75 | | self.0.is_all() |
76 | | } |
77 | | |
78 | 0 | fn intersects(&self, other) { |
79 | 0 | self.0.intersects(other.0) Unexecuted instantiation: <png::common::Transformations>::intersects Unexecuted instantiation: <png::common::Transformations>::intersects Unexecuted instantiation: <png::common::Transformations>::intersects |
80 | | } |
81 | | |
82 | 59.1k | fn contains(&self, other) { |
83 | 59.1k | self.0.contains(other.0) Unexecuted instantiation: <png::common::Transformations>::contains <png::common::Transformations>::contains Line | Count | Source | 82 | 59.1k | fn contains(&self, other) { | 83 | 59.1k | self.0.contains(other.0) |
Unexecuted instantiation: <png::common::Transformations>::contains Unexecuted instantiation: <png::common::Transformations>::contains |
84 | | } |
85 | | |
86 | | fn insert(&mut self, other) { |
87 | | self.0.insert(other.0) |
88 | | } |
89 | | |
90 | | fn remove(&mut self, other) { |
91 | | self.0.remove(other.0) |
92 | | } |
93 | | |
94 | | fn toggle(&mut self, other) { |
95 | | self.0.toggle(other.0) |
96 | | } |
97 | | |
98 | | fn set(&mut self, other, value) { |
99 | | self.0.set(other.0, value) |
100 | | } |
101 | | |
102 | | fn intersection(self, other) { |
103 | | Self(self.0.intersection(other.0)) |
104 | | } |
105 | | |
106 | 0 | fn union(self, other) { |
107 | 0 | Self(self.0.union(other.0)) |
108 | | } |
109 | | |
110 | | fn difference(self, other) { |
111 | | Self(self.0.difference(other.0)) |
112 | | } |
113 | | |
114 | | fn symmetric_difference(self, other) { |
115 | | Self(self.0.symmetric_difference(other.0)) |
116 | | } |
117 | | |
118 | | fn complement(self) { |
119 | | Self(self.0.complement()) |
120 | | } |
121 | | } |
122 | | } |
123 | | }; |
124 | | } |
125 | | |
126 | | /// Implement functions on the public (user-facing) bitflags type. |
127 | | /// |
128 | | /// We need to be careful about adding new methods and trait implementations here because they |
129 | | /// could conflict with items added by the end-user. |
130 | | #[macro_export] |
131 | | #[doc(hidden)] |
132 | | macro_rules! __impl_public_bitflags { |
133 | | ( |
134 | | $(#[$outer:meta])* |
135 | | $BitFlags:ident: $T:ty, $PublicBitFlags:ident { |
136 | | $( |
137 | | $(#[$inner:ident $($args:tt)*])* |
138 | | const $Flag:tt = $value:expr; |
139 | | )* |
140 | | } |
141 | | ) => { |
142 | | $crate::__impl_bitflags! { |
143 | | params: self, bits, name, other, value; |
144 | | $(#[$outer])* |
145 | | $BitFlags: $T { |
146 | | fn empty() { |
147 | | Self(<$T as $crate::Bits>::EMPTY) |
148 | | } |
149 | | |
150 | | fn all() { |
151 | | let mut truncated = <$T as $crate::Bits>::EMPTY; |
152 | | let mut i = 0; |
153 | | |
154 | | $( |
155 | | $crate::__bitflags_expr_safe_attrs!( |
156 | | $(#[$inner $($args)*])* |
157 | | {{ |
158 | | let flag = <$PublicBitFlags as $crate::Flags>::FLAGS[i].value().bits(); |
159 | | |
160 | | truncated = truncated | flag; |
161 | | i += 1; |
162 | | }} |
163 | | ); |
164 | | )* |
165 | | |
166 | | let _ = i; |
167 | | Self(truncated) |
168 | | } |
169 | | |
170 | 0 | fn bits(&self) { |
171 | 0 | self.0 |
172 | | } |
173 | | |
174 | | fn from_bits(bits) { |
175 | | let truncated = Self::from_bits_truncate(bits).0; |
176 | | |
177 | | if truncated == bits { |
178 | | $crate::__private::core::option::Option::Some(Self(bits)) |
179 | | } else { |
180 | | $crate::__private::core::option::Option::None |
181 | | } |
182 | | } |
183 | | |
184 | | fn from_bits_truncate(bits) { |
185 | | Self(bits & Self::all().0) |
186 | | } |
187 | | |
188 | 0 | fn from_bits_retain(bits) { |
189 | 0 | Self(bits) |
190 | | } |
191 | | |
192 | | fn from_name(name) { |
193 | | mod __bitflags_flag_names { |
194 | | use super::*; |
195 | | |
196 | | $( |
197 | | $crate::__bitflags_flag_name!( |
198 | | $(#[$inner $($args)*])* |
199 | | { pub(super) const $Flag = $Flag } |
200 | | ); |
201 | | )* |
202 | | } |
203 | | |
204 | | $( |
205 | | $crate::__bitflags_flag!({ |
206 | | name: $Flag, |
207 | | named: {{ |
208 | | $crate::__bitflags_expr_safe_attrs!( |
209 | | $(#[$inner $($args)*])* |
210 | | { |
211 | | if name == __bitflags_flag_names::$Flag { |
212 | | return $crate::__private::core::option::Option::Some(Self($PublicBitFlags::$Flag.bits())); |
213 | | } |
214 | | } |
215 | | ); |
216 | | }}, |
217 | | unnamed: {}, |
218 | | }); |
219 | | )* |
220 | | |
221 | | let _ = name; |
222 | | $crate::__private::core::option::Option::None |
223 | | } |
224 | | |
225 | 0 | fn is_empty(&self) { |
226 | 0 | self.0 == <$T as $crate::Bits>::EMPTY |
227 | | } |
228 | | |
229 | | fn is_all(&self) { |
230 | | // NOTE: We check against `Self::all` here, not `Self::Bits::ALL` |
231 | | // because the set of all flags may not use all bits |
232 | | Self::all().0 | self.0 == self.0 |
233 | | } |
234 | | |
235 | 0 | fn intersects(&self, other) { |
236 | 0 | self.0 & other.0 != <$T as $crate::Bits>::EMPTY Unexecuted instantiation: <png::common::_::InternalBitFlags>::intersects Unexecuted instantiation: <png::common::_::InternalBitFlags>::intersects Unexecuted instantiation: <png::common::_::InternalBitFlags>::intersects |
237 | | } |
238 | | |
239 | 59.1k | fn contains(&self, other) { |
240 | 59.1k | self.0 & other.0 == other.0 Unexecuted instantiation: <png::common::_::InternalBitFlags>::contains <png::common::_::InternalBitFlags>::contains Line | Count | Source | 239 | 59.1k | fn contains(&self, other) { | 240 | 59.1k | self.0 & other.0 == other.0 |
Unexecuted instantiation: <png::common::_::InternalBitFlags>::contains Unexecuted instantiation: <png::common::_::InternalBitFlags>::contains |
241 | | } |
242 | | |
243 | | fn insert(&mut self, other) { |
244 | | *self = Self(self.0).union(other); |
245 | | } |
246 | | |
247 | | fn remove(&mut self, other) { |
248 | | *self = Self(self.0).difference(other); |
249 | | } |
250 | | |
251 | | fn toggle(&mut self, other) { |
252 | | *self = Self(self.0).symmetric_difference(other); |
253 | | } |
254 | | |
255 | | fn set(&mut self, other, value) { |
256 | | if value { |
257 | | self.insert(other); |
258 | | } else { |
259 | | self.remove(other); |
260 | | } |
261 | | } |
262 | | |
263 | | fn intersection(self, other) { |
264 | | Self(self.0 & other.0) |
265 | | } |
266 | | |
267 | 0 | fn union(self, other) { |
268 | 0 | Self(self.0 | other.0) |
269 | | } |
270 | | |
271 | | fn difference(self, other) { |
272 | | Self(self.0 & !other.0) |
273 | | } |
274 | | |
275 | | fn symmetric_difference(self, other) { |
276 | | Self(self.0 ^ other.0) |
277 | | } |
278 | | |
279 | | fn complement(self) { |
280 | | Self::from_bits_truncate(!self.0) |
281 | | } |
282 | | } |
283 | | } |
284 | | }; |
285 | | } |
286 | | |
287 | | /// Implement iterators on the public (user-facing) bitflags type. |
288 | | #[macro_export] |
289 | | #[doc(hidden)] |
290 | | macro_rules! __impl_public_bitflags_iter { |
291 | | ( |
292 | | $(#[$outer:meta])* |
293 | | $BitFlags:ident: $T:ty, $PublicBitFlags:ident |
294 | | ) => { |
295 | | $(#[$outer])* |
296 | | impl $BitFlags { |
297 | | /// Yield a set of contained flags values. |
298 | | /// |
299 | | /// Each yielded flags value will correspond to a defined named flag. Any unknown bits |
300 | | /// will be yielded together as a final flags value. |
301 | | #[inline] |
302 | 0 | pub const fn iter(&self) -> $crate::iter::Iter<$PublicBitFlags> { |
303 | 0 | $crate::iter::Iter::__private_const_new( |
304 | | <$PublicBitFlags as $crate::Flags>::FLAGS, |
305 | 0 | $PublicBitFlags::from_bits_retain(self.bits()), |
306 | 0 | $PublicBitFlags::from_bits_retain(self.bits()), |
307 | | ) |
308 | 0 | } Unexecuted instantiation: <png::common::Transformations>::iter Unexecuted instantiation: <png::common::_::InternalBitFlags>::iter |
309 | | |
310 | | /// Yield a set of contained named flags values. |
311 | | /// |
312 | | /// This method is like [`iter`](#method.iter), except only yields bits in contained named flags. |
313 | | /// Any unknown bits, or bits not corresponding to a contained flag will not be yielded. |
314 | | #[inline] |
315 | | pub const fn iter_names(&self) -> $crate::iter::IterNames<$PublicBitFlags> { |
316 | | $crate::iter::IterNames::__private_const_new( |
317 | | <$PublicBitFlags as $crate::Flags>::FLAGS, |
318 | | $PublicBitFlags::from_bits_retain(self.bits()), |
319 | | $PublicBitFlags::from_bits_retain(self.bits()), |
320 | | ) |
321 | | } |
322 | | } |
323 | | |
324 | | $(#[$outer:meta])* |
325 | | impl $crate::__private::core::iter::IntoIterator for $BitFlags { |
326 | | type Item = $PublicBitFlags; |
327 | | type IntoIter = $crate::iter::Iter<$PublicBitFlags>; |
328 | | |
329 | 0 | fn into_iter(self) -> Self::IntoIter { |
330 | 0 | self.iter() |
331 | 0 | } Unexecuted instantiation: <png::common::Transformations as core::iter::traits::collect::IntoIterator>::into_iter Unexecuted instantiation: <png::common::_::InternalBitFlags as core::iter::traits::collect::IntoIterator>::into_iter |
332 | | } |
333 | | }; |
334 | | } |
335 | | |
336 | | /// Implement traits on the public (user-facing) bitflags type. |
337 | | #[macro_export] |
338 | | #[doc(hidden)] |
339 | | macro_rules! __impl_public_bitflags_ops { |
340 | | ( |
341 | | $(#[$outer:meta])* |
342 | | $PublicBitFlags:ident |
343 | | ) => { |
344 | | |
345 | | $(#[$outer])* |
346 | | impl $crate::__private::core::fmt::Binary for $PublicBitFlags { |
347 | 0 | fn fmt( |
348 | 0 | &self, |
349 | 0 | f: &mut $crate::__private::core::fmt::Formatter, |
350 | 0 | ) -> $crate::__private::core::fmt::Result { |
351 | 0 | let inner = self.0; |
352 | 0 | $crate::__private::core::fmt::Binary::fmt(&inner, f) |
353 | 0 | } Unexecuted instantiation: <png::common::_::InternalBitFlags as core::fmt::Binary>::fmt Unexecuted instantiation: <png::common::Transformations as core::fmt::Binary>::fmt |
354 | | } |
355 | | |
356 | | $(#[$outer])* |
357 | | impl $crate::__private::core::fmt::Octal for $PublicBitFlags { |
358 | 0 | fn fmt( |
359 | 0 | &self, |
360 | 0 | f: &mut $crate::__private::core::fmt::Formatter, |
361 | 0 | ) -> $crate::__private::core::fmt::Result { |
362 | 0 | let inner = self.0; |
363 | 0 | $crate::__private::core::fmt::Octal::fmt(&inner, f) |
364 | 0 | } Unexecuted instantiation: <png::common::Transformations as core::fmt::Octal>::fmt Unexecuted instantiation: <png::common::_::InternalBitFlags as core::fmt::Octal>::fmt |
365 | | } |
366 | | |
367 | | $(#[$outer])* |
368 | | impl $crate::__private::core::fmt::LowerHex for $PublicBitFlags { |
369 | 0 | fn fmt( |
370 | 0 | &self, |
371 | 0 | f: &mut $crate::__private::core::fmt::Formatter, |
372 | 0 | ) -> $crate::__private::core::fmt::Result { |
373 | 0 | let inner = self.0; |
374 | 0 | $crate::__private::core::fmt::LowerHex::fmt(&inner, f) |
375 | 0 | } Unexecuted instantiation: <png::common::Transformations as core::fmt::LowerHex>::fmt Unexecuted instantiation: <png::common::_::InternalBitFlags as core::fmt::LowerHex>::fmt |
376 | | } |
377 | | |
378 | | $(#[$outer])* |
379 | | impl $crate::__private::core::fmt::UpperHex for $PublicBitFlags { |
380 | 0 | fn fmt( |
381 | 0 | &self, |
382 | 0 | f: &mut $crate::__private::core::fmt::Formatter, |
383 | 0 | ) -> $crate::__private::core::fmt::Result { |
384 | 0 | let inner = self.0; |
385 | 0 | $crate::__private::core::fmt::UpperHex::fmt(&inner, f) |
386 | 0 | } Unexecuted instantiation: <png::common::Transformations as core::fmt::UpperHex>::fmt Unexecuted instantiation: <png::common::_::InternalBitFlags as core::fmt::UpperHex>::fmt |
387 | | } |
388 | | |
389 | | $(#[$outer])* |
390 | | impl $crate::__private::core::ops::BitOr for $PublicBitFlags { |
391 | | type Output = Self; |
392 | | |
393 | | /// The bitwise or (`|`) of the bits in `self` and `other`. |
394 | | #[inline] |
395 | 0 | fn bitor(self, other: $PublicBitFlags) -> Self { |
396 | 0 | self.union(other) |
397 | 0 | } |
398 | | } |
399 | | |
400 | | $(#[$outer])* |
401 | | impl $crate::__private::core::ops::BitOrAssign for $PublicBitFlags { |
402 | | /// The bitwise or (`|`) of the bits in `self` and `other`. |
403 | | #[inline] |
404 | | fn bitor_assign(&mut self, other: Self) { |
405 | | self.insert(other); |
406 | | } |
407 | | } |
408 | | |
409 | | $(#[$outer])* |
410 | | impl $crate::__private::core::ops::BitXor for $PublicBitFlags { |
411 | | type Output = Self; |
412 | | |
413 | | /// The bitwise exclusive-or (`^`) of the bits in `self` and `other`. |
414 | | #[inline] |
415 | | fn bitxor(self, other: Self) -> Self { |
416 | | self.symmetric_difference(other) |
417 | | } |
418 | | } |
419 | | |
420 | | $(#[$outer])* |
421 | | impl $crate::__private::core::ops::BitXorAssign for $PublicBitFlags { |
422 | | /// The bitwise exclusive-or (`^`) of the bits in `self` and `other`. |
423 | | #[inline] |
424 | | fn bitxor_assign(&mut self, other: Self) { |
425 | | self.toggle(other); |
426 | | } |
427 | | } |
428 | | |
429 | | $(#[$outer])* |
430 | | impl $crate::__private::core::ops::BitAnd for $PublicBitFlags { |
431 | | type Output = Self; |
432 | | |
433 | | /// The bitwise and (`&`) of the bits in `self` and `other`. |
434 | | #[inline] |
435 | | fn bitand(self, other: Self) -> Self { |
436 | | self.intersection(other) |
437 | | } |
438 | | } |
439 | | |
440 | | $(#[$outer])* |
441 | | impl $crate::__private::core::ops::BitAndAssign for $PublicBitFlags { |
442 | | /// The bitwise and (`&`) of the bits in `self` and `other`. |
443 | | #[inline] |
444 | | fn bitand_assign(&mut self, other: Self) { |
445 | | *self = Self::from_bits_retain(self.bits()).intersection(other); |
446 | | } |
447 | | } |
448 | | |
449 | | $(#[$outer])* |
450 | | impl $crate::__private::core::ops::Sub for $PublicBitFlags { |
451 | | type Output = Self; |
452 | | |
453 | | /// The intersection of `self` with the complement of `other` (`&!`). |
454 | | /// |
455 | | /// This method is not equivalent to `self & !other` when `other` has unknown bits set. |
456 | | /// `difference` won't truncate `other`, but the `!` operator will. |
457 | | #[inline] |
458 | | fn sub(self, other: Self) -> Self { |
459 | | self.difference(other) |
460 | | } |
461 | | } |
462 | | |
463 | | $(#[$outer])* |
464 | | impl $crate::__private::core::ops::SubAssign for $PublicBitFlags { |
465 | | /// The intersection of `self` with the complement of `other` (`&!`). |
466 | | /// |
467 | | /// This method is not equivalent to `self & !other` when `other` has unknown bits set. |
468 | | /// `difference` won't truncate `other`, but the `!` operator will. |
469 | | #[inline] |
470 | | fn sub_assign(&mut self, other: Self) { |
471 | | self.remove(other); |
472 | | } |
473 | | } |
474 | | |
475 | | $(#[$outer])* |
476 | | impl $crate::__private::core::ops::Not for $PublicBitFlags { |
477 | | type Output = Self; |
478 | | |
479 | | /// The bitwise negation (`!`) of the bits in `self`, truncating the result. |
480 | | #[inline] |
481 | | fn not(self) -> Self { |
482 | | self.complement() |
483 | | } |
484 | | } |
485 | | |
486 | | $(#[$outer])* |
487 | | impl $crate::__private::core::iter::Extend<$PublicBitFlags> for $PublicBitFlags { |
488 | | /// The bitwise or (`|`) of the bits in each flags value. |
489 | | fn extend<T: $crate::__private::core::iter::IntoIterator<Item = Self>>( |
490 | | &mut self, |
491 | | iterator: T, |
492 | | ) { |
493 | | for item in iterator { |
494 | | self.insert(item) |
495 | | } |
496 | | } |
497 | | } |
498 | | |
499 | | $(#[$outer])* |
500 | | impl $crate::__private::core::iter::FromIterator<$PublicBitFlags> for $PublicBitFlags { |
501 | | /// The bitwise or (`|`) of the bits in each flags value. |
502 | | fn from_iter<T: $crate::__private::core::iter::IntoIterator<Item = Self>>( |
503 | | iterator: T, |
504 | | ) -> Self { |
505 | | use $crate::__private::core::iter::Extend; |
506 | | |
507 | | let mut result = Self::empty(); |
508 | | result.extend(iterator); |
509 | | result |
510 | | } |
511 | | } |
512 | | }; |
513 | | } |
514 | | |
515 | | /// Implement constants on the public (user-facing) bitflags type. |
516 | | #[macro_export] |
517 | | #[doc(hidden)] |
518 | | macro_rules! __impl_public_bitflags_consts { |
519 | | ( |
520 | | $(#[$outer:meta])* |
521 | | $PublicBitFlags:ident: $T:ty { |
522 | | $( |
523 | | $(#[$inner:ident $($args:tt)*])* |
524 | | const $Flag:tt = $value:expr; |
525 | | )* |
526 | | } |
527 | | ) => { |
528 | | $(#[$outer])* |
529 | | impl $PublicBitFlags { |
530 | | $( |
531 | | $crate::__bitflags_flag!({ |
532 | | name: $Flag, |
533 | | named: { |
534 | | $crate::__bitflags_item_safe_attrs!( |
535 | | $(#[$inner $($args)*])* |
536 | | { |
537 | | pub const $Flag: Self = Self::from_bits_retain($value); |
538 | | } |
539 | | ); |
540 | | }, |
541 | | unnamed: {}, |
542 | | }); |
543 | | )* |
544 | | } |
545 | | |
546 | | $(#[$outer])* |
547 | | impl $crate::Flags for $PublicBitFlags { |
548 | | const FLAGS: &'static [$crate::Flag<$PublicBitFlags>] = { |
549 | | mod __bitflags_flag_names { |
550 | | use super::*; |
551 | | |
552 | | $( |
553 | | $crate::__bitflags_flag_name!( |
554 | | $(#[$inner $($args)*])* |
555 | | { pub(super) const $Flag = $Flag }); |
556 | | )* |
557 | | } |
558 | | |
559 | | &[ |
560 | | $( |
561 | | $crate::__bitflags_flag!({ |
562 | | name: $Flag, |
563 | | named: { |
564 | | $crate::__bitflags_expr_safe_attrs!( |
565 | | $(#[$inner $($args)*])* |
566 | | { |
567 | | $crate::Flag::new(__bitflags_flag_names::$Flag, $PublicBitFlags::$Flag) |
568 | | } |
569 | | ) |
570 | | }, |
571 | | unnamed: { |
572 | | $crate::__bitflags_expr_safe_attrs!( |
573 | | $(#[$inner $($args)*])* |
574 | | { |
575 | | $crate::Flag::new("", $PublicBitFlags::from_bits_retain($value)) |
576 | | } |
577 | | ) |
578 | | }, |
579 | | }), |
580 | | )* |
581 | | ] |
582 | | }; |
583 | | |
584 | | type Bits = $T; |
585 | | |
586 | 0 | fn bits(&self) -> $T { |
587 | 0 | $PublicBitFlags::bits(self) |
588 | 0 | } |
589 | | |
590 | 0 | fn from_bits_retain(bits: $T) -> $PublicBitFlags { |
591 | 0 | $PublicBitFlags::from_bits_retain(bits) |
592 | 0 | } |
593 | | |
594 | 0 | fn all_named() -> $PublicBitFlags { |
595 | | const ALL_NAMED: $T = { |
596 | | let mut truncated = <$T as $crate::Bits>::EMPTY; |
597 | | let mut i = 0; |
598 | | |
599 | | $( |
600 | | $crate::__bitflags_expr_safe_attrs!( |
601 | | $(#[$inner $($args)*])* |
602 | | {{ |
603 | | let flag = &<$PublicBitFlags as $crate::Flags>::FLAGS[i]; |
604 | | |
605 | | if flag.is_named() { |
606 | | truncated = truncated | flag.value().bits(); |
607 | | } |
608 | | |
609 | | i += 1; |
610 | | }} |
611 | | ); |
612 | | )* |
613 | | |
614 | | let _ = i; |
615 | | truncated |
616 | | }; |
617 | | |
618 | 0 | $PublicBitFlags::from_bits_retain(ALL_NAMED) |
619 | 0 | } |
620 | | } |
621 | | }; |
622 | | } |