Method: CSquare::Generator::Enum#enumerate

Defined in:
lib/csquare/generator/enum.rb

#enumerateObject

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