Source code for spinnman.data.little_endian_byte_array_byte_reader

from spinnman.data.abstract_byte_reader import AbstractByteReader


[docs]class LittleEndianByteArrayByteReader(AbstractByteReader): """ A byte reader that reads from a byte array using little endian notation """ def __init__(self, data): """ :param data: The byte array to read the data from :type data: bytearray """ self._data = data self._read_pointer = 0
[docs] def is_at_end(self): """ee :py:meth:`spinnman.data.abstract_byte_reader.AbstractByteReader.is_at_end` """ if self._read_pointer == len(self._data): return True return False
[docs] def read_byte(self): """ See :py:meth:`spinnman.data.abstract_byte_reader.AbstractByteReader.read_byte` """ if self._read_pointer >= len(self._data): raise EOFError("End of stream") value = self._data[self._read_pointer] self._read_pointer += 1 return value
[docs] def read_bytes(self, size=None): """ See :py:meth:`spinnman.data.abstract_byte_reader.AbstractByteReader.read_bytes` """ if size is None: if self._read_pointer == len(self._data): return bytearray() value = self._data[self._read_pointer:] self._read_pointer = len(self._data) return value if self._read_pointer + (size - 1) >= len(self._data): raise EOFError("Not enough bytes to read {} bytes".format(size)) new_pointer = self._read_pointer + size value = self._data[self._read_pointer:new_pointer] self._read_pointer = new_pointer return value
[docs] def read_short(self): """ See :py:meth:`spinnman.data.abstract_byte_reader.AbstractByteReader.read_short` """ if self._read_pointer + 1 >= len(self._data): raise EOFError("Not enough bytes to read a short") value = (self._data[self._read_pointer] | (self._data[self._read_pointer + 1] << 8)) self._read_pointer += 2 return value
[docs] def read_int(self): """ See :py:meth:`spinnman.data.abstract_byte_reader.AbstractByteReader.read_int` """ if self._read_pointer + 3 >= len(self._data): raise EOFError("Not enough bytes to read an int") value = (self._data[self._read_pointer] | (self._data[self._read_pointer + 1] << 8) | (self._data[self._read_pointer + 2] << 16) | (self._data[self._read_pointer + 3] << 24)) self._read_pointer += 4 return value
[docs] def read_long(self): """ See :py:meth:`spinnman.data.abstract_byte_reader.AbstractByteReader.read_long` """ if self._read_pointer + 7 >= len(self._data): raise EOFError("Not enough bytes to read a long") value = (self._data[self._read_pointer] | (self._data[self._read_pointer + 1] << 8) | (self._data[self._read_pointer + 2] << 16) | (self._data[self._read_pointer + 3] << 24) | (self._data[self._read_pointer + 4] << 32) | (self._data[self._read_pointer + 5] << 40) | (self._data[self._read_pointer + 6] << 48) | (self._data[self._read_pointer + 7] << 56)) self._read_pointer += 8 return value