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;
111e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan
121e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnanimport java.io.InputStream;
131e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan
141e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnanclass DeltaDecoder extends DeltaCoder implements FilterDecoder {
151e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan    private final int distance;
161e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan
171e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan    DeltaDecoder(byte[] props) throws UnsupportedOptionsException {
181e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan        if (props.length != 1)
191e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan            throw new UnsupportedOptionsException(
201e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan                    "Unsupported Delta filter properties");
211e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan
221e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan        distance = (props[0] & 0xFF) + 1;
231e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan    }
241e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan
251e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan    public int getMemoryUsage() {
261e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan        return 1;
271e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan    }
281e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan
291e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan    public InputStream getInputStream(InputStream in) {
301e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan        return new DeltaInputStream(in, distance);
311e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan    }
321e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan}
33