DoxigAlpha

fromInt

Function parameters

Parameters

#
E:type
integer:anytype

Functions in this namespace

Functions

#
EnumFieldStruct
Returns a struct with a field matching each unique named enum element.
valuesFromFields
Looks up the supplied fields in the given enum type.
values
Returns the set of all named values in the given enum, in
tagName
A safe alternative to @tagName() for non-exhaustive enums that doesn't
directEnumArrayLen
Determines the length of a direct-mapped enum array, indexed by
directEnumArray
Initializes an array of Data which can be indexed by
directEnumArrayDefault
Initializes an array of Data which can be indexed by
nameCast
Deprecated: Use @field(E, @tagName(tag)) or @field(E, string)
EnumSet
A set of enum elements, backed by a bitfield.
EnumMap
A map keyed by an enum, backed by a bitfield and a dense array.
EnumMultiset
A multiset of enum elements up to a count of usize.
BoundedEnumMultiset
A multiset of enum elements up to CountSize.
EnumArray
An array keyed by an enum, backed by a dense array.

Source

Implementation

#
pub fn fromInt(comptime E: type, integer: anytype) ?E {
    const enum_info = @typeInfo(E).@"enum";
    if (!enum_info.is_exhaustive) {
        if (std.math.cast(enum_info.tag_type, integer)) |tag| {
            return @enumFromInt(tag);
        }
        return null;
    }
    // We don't directly iterate over the fields of E, as that
    // would require an inline loop. Instead, we create an array of
    // values that is comptime-know, but can be iterated at runtime
    // without requiring an inline loop.
    // This generates better machine code.
    for (values(E)) |value| {
        if (@intFromEnum(value) == integer) return @enumFromInt(integer);
    }
    return null;
}