lib/bindata/int.rb in bindata-1.3.1 vs lib/bindata/int.rb in bindata-1.4.0
- old
+ new
@@ -9,11 +9,10 @@
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
- register_self
Int.define_methods(self, #{nbits}, :#{endian}, :#{signed})
end
END
end
@@ -79,13 +78,11 @@
def create_int2uint_code(nbits)
"val = val & #{(1 << nbits) - 1}"
end
def create_uint2int_code(nbits)
- mask = (1 << (nbits - 1)) - 1
-
- "val = -(((~val) & #{mask}) + 1) if (val >= #{1 << (nbits - 1)})"
+ "val = val - #{1 << nbits} if (val >= #{1 << (nbits - 1)})"
end
def create_read_code(nbits, endian)
bits_per_word = bytes_per_word(nbits) * 8
nwords = nbits / bits_per_word
@@ -149,16 +146,14 @@
end
# Unsigned 1 byte integer.
class Uint8 < BinData::BasePrimitive
- register_self
Int.define_methods(self, 8, :little, :unsigned)
end
# Signed 1 byte integer.
class Int8 < BinData::BasePrimitive
- register_self
Int.define_methods(self, 8, :little, :signed)
end
# Create classes on demand
class << self