[−][src]Crate wasmer_enumset
A library for defining enums that can be used in compact bit sets. It supports enums up to 128 variants, and has a macro to use these sets in constants.
For serde support, enable the serde
feature.
Defining enums for use with EnumSet
Enums to be used with EnumSet
should be defined using #[derive(EnumSetType)]
:
#[derive(EnumSetType, Debug)] pub enum Enum { A, B, C, D, E, F, G, }
For more information on more advanced use cases, see the documentation for EnumSetType
.
Working with EnumSets
EnumSets can be constructed via EnumSet::new()
like a normal set. In addition,
#[derive(EnumSetType)]
creates operator overloads that allow you to create EnumSets like so:
let new_set = Enum::A | Enum::C | Enum::G; assert_eq!(new_set.len(), 3);
All bitwise operations you would expect to work on bitsets also work on both EnumSets and
enums with #[derive(EnumSetType)]
:
// Intersection of sets assert_eq!((Enum::A | Enum::B) & Enum::C, EnumSet::empty()); assert_eq!((Enum::A | Enum::B) & Enum::A, Enum::A); assert_eq!(Enum::A & Enum::B, EnumSet::empty()); // Symmetric difference of sets assert_eq!((Enum::A | Enum::B) ^ (Enum::B | Enum::C), Enum::A | Enum::C); assert_eq!(Enum::A ^ Enum::C, Enum::A | Enum::C); // Difference of sets assert_eq!((Enum::A | Enum::B | Enum::C) - Enum::B, Enum::A | Enum::C); // Complement of sets assert_eq!(!(Enum::E | Enum::G), Enum::A | Enum::B | Enum::C | Enum::D | Enum::F);
The enum_set!
macro allows you to create EnumSets in constant contexts:
const CONST_SET: EnumSet<Enum> = enum_set!(Enum::A | Enum::B); assert_eq!(CONST_SET, Enum::A | Enum::B);
Mutable operations on the EnumSet
otherwise similarly to Rust's builtin sets:
let mut set = EnumSet::new(); set.insert(Enum::A); set.insert_all(Enum::E | Enum::G); assert!(set.contains(Enum::A)); assert!(!set.contains(Enum::B)); assert_eq!(set, Enum::A | Enum::E | Enum::G);
Macros
enum_set | Creates a EnumSet literal, which can be used in const contexts. |
Structs
EnumSet | An efficient set type for enums. |
EnumSetIter | The iterator used by |
Traits
EnumSetType | The trait used to define enum types that may be used with |
Derive Macros
EnumSetType | A wrapper that parses the input enum. |