def testReadVarSize(self): # overflow, 2^32 - 1 is too much (b'\x83\xFF\xFF\xFF\xFF') is the maximum) reader = BitStreamReader(b'\x87\xFF\xFF\xFF\xFF') with self.assertRaises(PythonRuntimeException): reader.readVarSize() # overflow, 2^36 - 1 is too much (b'\x83\xFF\xFF\xFF\xFF') is the maximum) reader = BitStreamReader(b'\xFF\xFF\xFF\xFF\xFF') with self.assertRaises(PythonRuntimeException): reader.readVarSize()
def read(self, reader: BitStreamReader, size: int = 0) -> None: """ Reads array from the bit stream. :param reader: Bit stream from which to read. :param size: Number of elements to read or None in case of implicit or auto arrays. :raises PythonRuntimeException: If the array does not have elements with constant bit size. """ self._rawArray.clear() if self._isImplicit: if not self._arrayTraits.HAS_BITSIZEOF_CONSTANT: raise PythonRuntimeException("Array: Implicit array elements must have constant bit size!") elementSize = self._arrayTraits.bitSizeOf() remainingBits = reader.getBufferBitSize() - reader.getBitPosition() readSize = remainingBits // elementSize for index in range(readSize): self._rawArray.append(self._arrayTraits.read(reader, index)) else: if self._isAuto: readSize = reader.readVarSize() else: readSize = size for index in range(readSize): if self._checkOffsetMethod is not None: reader.alignTo(8) self._checkOffsetMethod(index, reader.getBitPosition()) self._rawArray.append(self._arrayTraits.read(reader, index))
def read(reader: BitStreamReader, _index: int) -> int: """ Reads Zserio varsize type from the bit stream. :param reader: Bit stream from which to read. :param _index: Not used. """ return reader.readVarSize()