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