13e46e4ee56c8e37158f46941dedd5b436d724baaKenny Root/*
23e46e4ee56c8e37158f46941dedd5b436d724baaKenny Root * Copyright 2014 The Android Open Source Project
33e46e4ee56c8e37158f46941dedd5b436d724baaKenny Root *
43e46e4ee56c8e37158f46941dedd5b436d724baaKenny Root * Licensed under the Apache License, Version 2.0 (the "License");
53e46e4ee56c8e37158f46941dedd5b436d724baaKenny Root * you may not use this file except in compliance with the License.
63e46e4ee56c8e37158f46941dedd5b436d724baaKenny Root * You may obtain a copy of the License at
73e46e4ee56c8e37158f46941dedd5b436d724baaKenny Root *
83e46e4ee56c8e37158f46941dedd5b436d724baaKenny Root *      http://www.apache.org/licenses/LICENSE-2.0
93e46e4ee56c8e37158f46941dedd5b436d724baaKenny Root *
103e46e4ee56c8e37158f46941dedd5b436d724baaKenny Root * Unless required by applicable law or agreed to in writing, software
113e46e4ee56c8e37158f46941dedd5b436d724baaKenny Root * distributed under the License is distributed on an "AS IS" BASIS,
123e46e4ee56c8e37158f46941dedd5b436d724baaKenny Root * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133e46e4ee56c8e37158f46941dedd5b436d724baaKenny Root * See the License for the specific language governing permissions and
143e46e4ee56c8e37158f46941dedd5b436d724baaKenny Root * limitations under the License.
153e46e4ee56c8e37158f46941dedd5b436d724baaKenny Root */
163e46e4ee56c8e37158f46941dedd5b436d724baaKenny Root
173e46e4ee56c8e37158f46941dedd5b436d724baaKenny Rootpackage org.conscrypt.util;
183e46e4ee56c8e37158f46941dedd5b436d724baaKenny Root
193e46e4ee56c8e37158f46941dedd5b436d724baaKenny Root/**
203e46e4ee56c8e37158f46941dedd5b436d724baaKenny Root * Compatibility utility for Arrays.
213e46e4ee56c8e37158f46941dedd5b436d724baaKenny Root */
223e46e4ee56c8e37158f46941dedd5b436d724baaKenny Rootpublic final class Arrays {
233e46e4ee56c8e37158f46941dedd5b436d724baaKenny Root    private Arrays() {
243e46e4ee56c8e37158f46941dedd5b436d724baaKenny Root    }
253e46e4ee56c8e37158f46941dedd5b436d724baaKenny Root
263e46e4ee56c8e37158f46941dedd5b436d724baaKenny Root    /**
273e46e4ee56c8e37158f46941dedd5b436d724baaKenny Root     * Checks that the range described by {@code offset} and {@code count}
283e46e4ee56c8e37158f46941dedd5b436d724baaKenny Root     * doesn't exceed {@code arrayLength}.
293e46e4ee56c8e37158f46941dedd5b436d724baaKenny Root     *
303e46e4ee56c8e37158f46941dedd5b436d724baaKenny Root     * @hide
313e46e4ee56c8e37158f46941dedd5b436d724baaKenny Root     */
323e46e4ee56c8e37158f46941dedd5b436d724baaKenny Root    public static final void checkOffsetAndCount(int arrayLength, int offset, int count) {
333e46e4ee56c8e37158f46941dedd5b436d724baaKenny Root        if ((offset | count) < 0 || offset > arrayLength || arrayLength - offset < count) {
343e46e4ee56c8e37158f46941dedd5b436d724baaKenny Root            throw new ArrayIndexOutOfBoundsException("length=" + arrayLength + "; regionStart="
353e46e4ee56c8e37158f46941dedd5b436d724baaKenny Root                    + offset + "; regionLength=" + count);
363e46e4ee56c8e37158f46941dedd5b436d724baaKenny Root        }
373e46e4ee56c8e37158f46941dedd5b436d724baaKenny Root    }
383e46e4ee56c8e37158f46941dedd5b436d724baaKenny Root}
39