Module: WGPU::Native::EnumHelper
- Defined in:
- lib/wgpu/native/enum_helper.rb
Class Method Summary collapse
-
.coerce(enum, value, name: "enum") ⇒ Integer
Converts a symbolic enum member to its integer value.
-
.coerce_flags(enum, value, name: "flags") ⇒ Integer
Converts symbolic flag names to their combined integer bitset.
-
.decompose_flags(enum, value) ⇒ Array<Symbol>
Expands a bitset into its independent symbolic flags.
Class Method Details
.coerce(enum, value, name: "enum") ⇒ Integer
Converts a symbolic enum member to its integer value.
14 15 16 17 18 19 20 21 22 23 |
# File 'lib/wgpu/native/enum_helper.rb', line 14 def coerce(enum, value, name: "enum") return value if value.is_a?(Integer) raise ArgumentError, "#{name} must be a Symbol or Integer, got #{value.class}" unless value.is_a?(Symbol) mapping = mapping_for(enum) result = mapping[value] return result unless result.nil? raise ArgumentError, (name, value, mapping.keys) end |
.coerce_flags(enum, value, name: "flags") ⇒ Integer
Converts symbolic flag names to their combined integer bitset.
32 33 34 35 36 37 38 39 40 41 |
# File 'lib/wgpu/native/enum_helper.rb', line 32 def coerce_flags(enum, value, name: "flags") return value if value.is_a?(Integer) values = value.is_a?(Array) ? value : [value] unless values.all? { |item| item.is_a?(Symbol) } raise ArgumentError, "#{name} must be a Symbol, Integer, or Array of Symbols" end values.reduce(0) { |flags, item| flags | coerce(enum, item, name:) } end |
.decompose_flags(enum, value) ⇒ Array<Symbol>
Expands a bitset into its independent symbolic flags.
47 48 49 50 51 52 53 54 55 56 |
# File 'lib/wgpu/native/enum_helper.rb', line 47 def decompose_flags(enum, value) raise ArgumentError, "flag value must be an Integer" unless value.is_a?(Integer) mapping = mapping_for(enum) return [:none] if value.zero? && mapping.key?(:none) mapping.filter_map do |symbol, bit| symbol if bit.positive? && power_of_two?(bit) && (value & bit) == bit end end |