diff --git a/leopard/leopard.nim b/leopard/leopard.nim index 615f7ad..71d23ee 100644 --- a/leopard/leopard.nim +++ b/leopard/leopard.nim @@ -48,8 +48,8 @@ type func encode*( self: var LeoEncoder, - data, - parity: var openArray[seq[byte]]): Result[void, cstring] = + data,parity: ptr UncheckedArray[ptr UncheckedArray[byte]], + dataLen,parityLen: int ): Result[void, cstring] = ## Encode a list of buffers in `data` into a number of `bufSize` sized ## `parity` buffers ## @@ -57,10 +57,10 @@ func encode*( ## `parity` - list of parity `buffers` of size `bufSize` ## - if data.len != self.buffers: + if dataLen != self.buffers: return err("Number of data buffers should match!") - if parity.len != self.parity: + if parityLen != self.parity: return err("Number of parity buffers should match!") # zero encode work buffer to avoid corrupting with previous run @@ -68,7 +68,7 @@ func encode*( zeroMem(self.workBufferPtr[i], self.bufSize) # copy data into aligned buffer - for i in 0.. 0: - copyMem(self.dataBufferPtr[i], addr data[i][0], self.bufSize) + for i in 0.. 0: + if i < parityLen and not parity[i].isNil: copyMem(self.workBufferPtr[i], addr parity[i][0], self.bufSize) parityPtr[i] = self.workBufferPtr[i] else: diff --git a/tests/helpers.nim b/tests/helpers.nim index 847e901..3b43899 100644 --- a/tests/helpers.nim +++ b/tests/helpers.nim @@ -24,22 +24,22 @@ proc randomCRCPacket*(data: var openArray[byte]) = copyMem(addr data[4], unsafeAddr crc, sizeof(crc)) -proc checkCRCPacket*(data: openArray[byte]): bool = - if data.len < 16: - for d in data[1..data.high]: - if d != data[0]: +proc checkCRCPacket*(data: ptr UncheckedArray[byte], len: int): bool = + if len < 16: + for i in 1.. 0: - dropRandomIdx(dataBuf, dataLosses) + dropRandomIdx(dataBuf,buffers, dataLosses) if parityLosses > 0: - dropRandomIdx(parityBuf, parityLosses) + dropRandomIdx(parityBuf,parity,parityLosses) - decoder.decode(dataBuf, parityBuf, recoveredBuf).tryGet() + decoder.decode(dataBuf, parityBuf, recoveredBuf,buffers,parity,buffers).tryGet() - for i, d in dataBuf: - if d.len <= 0: - if not checkCRCPacket(recoveredBuf[i]): + for i in 0..