Skip to content

Commit

Permalink
[#40] Add fromReader method to runtime arrays
Browse files Browse the repository at this point in the history
  • Loading branch information
mikir committed Nov 22, 2018
1 parent 6bdb1d5 commit 23073c7
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 0 deletions.
23 changes: 23 additions & 0 deletions compiler/extensions/python/runtime/src/zserio/array.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,29 @@ def __init__(self, arrayTraits, rawArray=None, *, isAuto=None, isImplicit=None,
self._setOffsetMethod = setOffsetMethod
self._checkOffsetMethod = checkOffsetMethod

@classmethod
def fromReader(cls, arrayTraits, reader, size=None, *, isAuto=None, isImplicit=None, setOffsetMethod=None,
checkOffsetMethod=None):
"""
Constructs array and reads elements from the given bit stream reader.
:param arrayTraits: Array traits which specify the array type.
:param reader: Bit stream from which to read.
:param size: Number of elements to read or None in case of implicit or auto arrays.
:param rawArray: Native python list which will be hold by this abstraction.
:param isAuto: True if mapped Zserio array is auto array.
:param isImplicit: True if mapped Zserio array is implicit array.
:param setOffsetMethod: Set offset method if mapped Zserio array is indexed offset array.
:param checkOffsetMethod: Check offset method if mapped Zserio array is indexed offset array.
:returns: Array instance filled using given bit stream reader.
"""

instance = cls(arrayTraits, isAuto=isAuto, isImplicit=isImplicit, setOffsetMethod=setOffsetMethod,
checkOffsetMethod=checkOffsetMethod)
instance.read(reader, size)

return instance

def __eq__(self, other):
return (self._rawArray == other._rawArray and
self._arrayTraits == other._arrayTraits and
Expand Down
9 changes: 9 additions & 0 deletions compiler/extensions/python/runtime/tests/test_array.py
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,7 @@ def write(self, writer):
self._testArray(arrayTraits, array1Values, array1BitSizeOf, array1AligneBitSizeOf, array2Values)

def _testArray(self, arrayTraits, array1Values, array1BitSizeOf, array1AlignedBitSizeOf, array2Values):
self._testFromReader(arrayTraits, array1Values)
self._testHashCode(arrayTraits, array1Values, array2Values)
self._testLen(arrayTraits, array1Values)
self._testGetItem(arrayTraits, array1Values)
Expand All @@ -178,6 +179,14 @@ def _testArray(self, arrayTraits, array1Values, array1BitSizeOf, array1AlignedBi
self._testRead(arrayTraits, array1Values)
self._testWrite(arrayTraits, array1Values, array1BitSizeOf, array1AlignedBitSizeOf)

def _testFromReader(self, arrayTraits, arrayValues):
array = Array(arrayTraits, arrayValues)
writer = BitStreamWriter()
array.write(writer)
reader = BitStreamReader(writer.getByteArray())
readArray = Array.fromReader(arrayTraits, reader, len(arrayValues))
self.assertEqual(array, readArray)

def _testHashCode(self, arrayTraits, array1Values, array2Values):
array1 = Array(arrayTraits, array1Values)
array2 = Array(arrayTraits, array2Values)
Expand Down

0 comments on commit 23073c7

Please sign in to comment.