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