11e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan/* 21e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan * DeltaDecoder 31e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan * 41e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan * Author: Lasse Collin <lasse.collin@tukaani.org> 51e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan * 61e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan * This file has been put into the public domain. 71e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan * You can do whatever you want with this file. 81e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan */ 91e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan 101e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnanpackage org.tukaani.xz.delta; 111e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan 121e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnanpublic class DeltaDecoder extends DeltaCoder { 131e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan public DeltaDecoder(int distance) { 141e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan super(distance); 151e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan } 161e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan 171e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan public void decode(byte[] buf, int off, int len) { 181e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan int end = off + len; 191e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan for (int i = off; i < end; ++i) { 201e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan buf[i] += history[(distance + pos) & DISTANCE_MASK]; 211e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan history[pos-- & DISTANCE_MASK] = buf[i]; 221e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan } 231e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan } 241e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan} 25