class Xdrgen::AST::Definitions::EnumMember

Public Instance Methods

auto_value() click to toggle source
# File lib/xdrgen/ast/definitions/enum_member.rb, line 22
def auto_value
  index = enum.members.index(self)
  if index == 0
    0
  else
    # use the previous members value + 1
    enum.members[index - 1].value + 1
  end
end
defined_value() click to toggle source
# File lib/xdrgen/ast/definitions/enum_member.rb, line 32
def defined_value
  return if value_n.terminal?

  case value_n.val
  when Constant
    value_n.val.value
  when Identifier
    namespace.find_enum_value(value_n.val.name).defined_value
  end
end
enum() click to toggle source
# File lib/xdrgen/ast/definitions/enum_member.rb, line 17
        def enum
  find_ancestors(Enum).last
end
value() click to toggle source
# File lib/xdrgen/ast/definitions/enum_member.rb, line 9
def value
  unsigned_value = defined_value || auto_value

  # enums are signed in xdr, so...
  # convert to twos complement value
  [unsigned_value].pack("l>").unpack("l>").first
end