lib/bindata/int.rb in bindata-1.8.3 vs lib/bindata/int.rb in bindata-2.0.0
- old
+ new
@@ -4,11 +4,12 @@
# Defines a number of classes that contain an integer. The integer
# is defined by endian, signedness and number of bytes.
module Int #:nodoc: all
class << self
- def define_class(name, nbits, endian, signed)
+ def define_class(nbits, endian, signed)
+ name = class_name(nbits, endian, signed)
unless BinData.const_defined?(name)
BinData.module_eval <<-END
class #{name} < BinData::BasePrimitive
Int.define_methods(self, #{nbits}, :#{endian}, :#{signed})
end
@@ -16,10 +17,17 @@
end
BinData.const_get(name)
end
+ def class_name(nbits, endian, signed)
+ endian_str = (endian == :big) ? "be" : "le"
+ base = (signed == :signed) ? "Int" : "Uint"
+
+ "#{base}#{nbits}#{endian_str}"
+ end
+
def define_methods(int_class, nbits, endian, signed)
raise "nbits must be divisible by 8" unless (nbits % 8).zero?
int_class.module_eval <<-END
def assign(val)
@@ -160,10 +168,10 @@
mappings.each_pair do |regex, args|
if regex =~ name.to_s
nbits = $1.to_i
if (nbits % 8).zero?
- return Int.define_class(name, nbits, *args)
+ return Int.define_class(nbits, *args)
end
end
end
super