11e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan/*
21e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan * RawCoder
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 Krishnanclass RawCoder {
131e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan    static void validate(FilterCoder[] filters)
141e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan            throws UnsupportedOptionsException {
151e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan        for (int i = 0; i < filters.length - 1; ++i)
161e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan            if (!filters[i].nonLastOK())
171e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan                throw new UnsupportedOptionsException(
181e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan                        "Unsupported XZ filter chain");
191e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan
201e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan        if (!filters[filters.length - 1].lastOK())
211e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan            throw new UnsupportedOptionsException(
221e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan                    "Unsupported XZ filter chain");
231e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan
241e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan        int changesSizeCount = 0;
251e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan        for (int i = 0; i < filters.length; ++i)
261e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan            if (filters[i].changesSize())
271e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan                ++changesSizeCount;
281e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan
291e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan        if (changesSizeCount > 3)
301e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan            throw new UnsupportedOptionsException(
311e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan                    "Unsupported XZ filter chain");
321e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan    }
331e977d75f657dacb4cb5c36ab6054bcf66b08076Vinod Krishnan}
34