Files
SWCompression/Sources/Common/DeltaFilter.swift
T
2019-01-02 23:15:43 +03:00

36 lines
748 B
Swift

// Copyright (c) 2019 Timofey Solomko
// Licensed under MIT License
//
// See LICENSE for license information
import Foundation
import BitByteData
final class DeltaFilter {
static func decode(_ byteReader: ByteReader, _ distance: Int) -> Data {
var out = [UInt8]()
var pos = 0
var delta = Array(repeating: 0 as UInt8, count: 256)
while !byteReader.isFinished {
let byte = byteReader.byte()
var tmp = delta[(distance + pos) % 256]
tmp = byte &+ tmp
delta[pos] = tmp
out.append(tmp)
if pos == 0 {
pos = 255
} else {
pos -= 1
}
}
return Data(bytes: out)
}
}