Method: CSquare::Generator::Enum#enumerate
- Defined in:
- lib/csquare/generator/enum.rb
#enumerate ⇒ Object
Pre-set/retrieve all the enum values (e.g., OP_ADD => ‘+’.ord) for the specified ops or dtypes (an Array).
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/csquare/generator/enum.rb', line 47 def enumerate h = {} nums_used = Set.new autos = [] if @selector.is_a?(Hash) @selector.each_pair do |name, enumeree| prefixed_name = [@prefix, name].compact.join('_') autos << [enumeree, prefixed_name] end else @selector.each do |enumeree| num = @namer.num(enumeree) name = @namer.name(enumeree) next if name.nil? # don't bother if we couldn't determine a name if num == :auto autos << [enumeree, name] else h[name] = [enumeree, num] nums_used.add(num) unless num == :auto end end end count = 0 # Now go back and re-number everything marked :auto autos.each do |enumeree_and_name| enumeree, name = enumeree_and_name # Find the next unused number count += 1 while nums_used.include?(count) nums_used.add(count) h[name] = [enumeree, count] end h end |