""" Integer field classes: - UInt8, UInt16, UInt24, UInt32, UInt64: unsigned integer of 8, 16, 32, 64 bits ; - Int8, Int16, Int24, Int32, Int64: signed integer of 8, 16, 32, 64 bits. """ from hachoir.field import Bits, FieldError class GenericInteger(Bits): """ Generic integer class used to generate other classes. """ def __init__(self, parent, name, signed, size, description=None): if not (8 <= size <= 16384): raise FieldError( "Invalid integer size (%s): have to be in 8..16384" % size) Bits.__init__(self, parent, name, size, description) self.signed = signed def createValue(self): return self._parent.stream.readInteger( self.absolute_address, self.signed, self._size, self._parent.endian) def integerFactory(name, is_signed, size, doc): class Integer(GenericInteger): __doc__ = doc static_size = size def __init__(self, parent, name, description=None): GenericInteger.__init__( self, parent, name, is_signed, size, description) cls = Integer cls.__name__ = name return cls UInt8 = integerFactory("UInt8", False, 8, "Unsigned integer of 8 bits") UInt16 = integerFactory("UInt16", False, 16, "Unsigned integer of 16 bits") UInt24 = integerFactory("UInt24", False, 24, "Unsigned integer of 24 bits") UInt32 = integerFactory("UInt32", False, 32, "Unsigned integer of 32 bits") UInt64 = integerFactory("UInt64", False, 64, "Unsigned integer of 64 bits") Int8 = integerFactory("Int8", True, 8, "Signed integer of 8 bits") Int16 = integerFactory("Int16", True, 16, "Signed integer of 16 bits") Int24 = integerFactory("Int24", True, 24, "Signed integer of 24 bits") Int32 = integerFactory("Int32", True, 32, "Signed integer of 32 bits") Int64 = integerFactory("Int64", True, 64, "Signed integer of 64 bits")