class Object
Public Instance Methods
_def_enum(size)
click to toggle source
# File lib/bindata-contrib/enum.rb, line 3 def _def_enum(size) eval %( module BinData class Enum#{size} < Primitive mandatory_parameter :list endian :big uint#{size} :enum, initial_value: 0 def get list.invert.fetch(enum) rescue KeyError enum end def set(value) self.enum = list.fetch(value) rescue KeyError self.enum = value end private def list list = eval_parameter(:list) case list.class.to_s when 'Array' shift = 0 list.each_with_object({}) do |each, result| result[each] = shift shift += 1 result end when 'Hash' list end end end end ) end
_def_flags(size)
click to toggle source
# File lib/bindata-contrib/flags.rb, line 3 def _def_flags(size) eval %( module BinData class Flags#{size} < Primitive mandatory_parameter :list endian :big uint#{size} :flags, initial_value: 0 def get list.each_with_object([]) do |(key, value), result| result << key if (flags & value != 0) || (flags == value) result end end def set(value) value.each do |each| fail "Invalid flag: \#{value}" unless list.keys.include?(each) end self.flags = value.empty? ? 0 : value.map { |each| list[each] }.inject(:|) end private def list list = eval_parameter(:list) case list.class.to_s when 'Array' shift = 0 list.each_with_object({}) do |each, result| result[each] = 1 << shift shift += 1 result end when 'Hash' list end end end end ) end