def from_stream(cls, stream, offset=None): """Creates a :class:`SHITEMID` from a stream. :type stream: :class:`lf.dec.IStream` :param stream: A stream that contains the structure. :type offset: ``int`` :param offset: The start of the structure in :attr:`stream` :rtype: :class:`SHITEMID` :returns: The corresponding :class:`SHITEMID` object. """ if offset is not None: stream.seek(offset, SEEK_SET) # end if data = stream.read(2) if len(data) < 2: return cls((len(data), 0, None)) # end if size = uint16_le.from_buffer_copy(data).value if size <= 2: return cls((2, size, None)) # end if data_size = size - 2 data = stream.read(data_size) return cls((len(data) + 2, size, data))
def uint16_le(self, offset=None): """ Reads an unsigned 16-bit integer (little endian). :type offset: :class:`int` or :keyword:`None` :param offset: The start of the integer. :except ValueError: if :attr:`stream` (starting at :attr:`offset` is too small.) :rtype: :class:`int` :returns: The corresponding value. """ if offset is not None: self.stream.seek(offset, SEEK_SET) # end if return uint16_le.from_buffer_copy(self.stream.read(2)).value