[−][src]Crate big_enum_set
A library for defining enums that can be used in compact bit sets. The code is based on
the enum_set
crate, except that the backing store used is an array of usize
. This enables
use with enums with large number of variants. The API is very similar to that of enumset
.
For serde support, enable the serde
feature.
Defining enums for use with BigEnumSet
Enums to be used with BigEnumSet
should be defined using #[derive(BigEnumSetType)]
:
#[derive(BigEnumSetType, Debug)] pub enum Enum { A, B, C, D, E, F, G, }
Working with BigEnumSets
BigEnumSets can be constructed via BigEnumSet::new()
like a normal set. In addition,
#[derive(BigEnumSetType)]
creates operator overloads that allow you to create BigEnumSets 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 BigEnumSets and
enums with #[derive(BigEnumSetType)]
:
// Intersection of sets assert_eq!((Enum::A | Enum::B) & Enum::C, BigEnumSet::empty()); assert_eq!((Enum::A | Enum::B) & Enum::A, Enum::A); assert_eq!(Enum::A & Enum::B, BigEnumSet::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 big_enum_set!
macro allows you to create BigEnumSets in constant contexts:
const CONST_SET: BigEnumSet<Enum> = big_enum_set!(Enum::A | Enum::B); assert_eq!(CONST_SET, Enum::A | Enum::B);
Mutable operations on the BigEnumSet
otherwise work basically as expected:
let mut set = BigEnumSet::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
big_enum_set | Creates a BigEnumSet literal, which can be used in const contexts. |
Structs
BigEnumSet | An efficient set type for enums. |
EnumSetIter | The iterator used by |
Traits
BigEnumSetType | The trait used to define enum types that may be used with |
Derive Macros
BigEnumSetType |