org.yaml.snakeyaml.util.ArrayUtils Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of snakeyaml Show documentation
Show all versions of snakeyaml Show documentation
YAML 1.1 parser and emitter for Java
/**
* Copyright (c) 2008, http://www.snakeyaml.org
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.yaml.snakeyaml.util;
import java.util.AbstractList;
import java.util.Collections;
import java.util.List;
public class ArrayUtils {
private ArrayUtils() {
}
/**
* Returns an unmodifiable {@code List} backed by the given array. The method doesn't copy the array, so the changes
* to the array will affect the {@code List} as well.
* @param class of the elements in the array
* @param elements - array to convert
* @return {@code List} backed by the given array
*/
public static List toUnmodifiableList(E... elements) {
return elements.length == 0 ? Collections.emptyList() : new UnmodifiableArrayList(elements);
}
/**
* Returns an unmodifiable {@code List} containing the second array appended to the first one. The method doesn't copy
* the arrays, so the changes to the arrays will affect the {@code List} as well.
* @param class of the elements in the array
* @param array1 - the array to extend
* @param array2 - the array to add to the first
* @return {@code List} backed by the given arrays
*/
public static List toUnmodifiableCompositeList(E[] array1, E[] array2) {
List result;
if (array1.length == 0) {
result = toUnmodifiableList(array2);
} else if (array2.length == 0) {
result = toUnmodifiableList(array1);
} else {
result = new CompositeUnmodifiableArrayList(array1, array2);
}
return result;
}
private static class UnmodifiableArrayList extends AbstractList {
private final E[] array;
UnmodifiableArrayList(E[] array) {
this.array = array;
}
@Override
public E get(int index) {
if (index >= array.length) {
throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size());
}
return array[index];
}
@Override
public int size() {
return array.length;
}
}
private static class CompositeUnmodifiableArrayList extends AbstractList {
private final E[] array1;
private final E[] array2;
CompositeUnmodifiableArrayList(E[] array1, E[] array2) {
this.array1 = array1;
this.array2 = array2;
}
@Override
public E get(int index) {
E element;
if (index < array1.length) {
element = array1[index];
} else if (index - array1.length < array2.length){
element = array2[index - array1.length];
} else {
throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size());
}
return element;
}
@Override
public int size() {
return array1.length + array2.length;
}
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy