blob: f886b3fb1c1b479f7ea93a9dc06817b6a309b135 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.apache.sis.internal.jdk9;
import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.DoubleBuffer;
import java.nio.FloatBuffer;
import java.nio.IntBuffer;
import java.nio.LongBuffer;
import java.nio.ShortBuffer;
import java.util.Arrays;
import java.util.Set;
import java.util.List;
import java.util.Collections;
import java.util.LinkedHashSet;
import org.apache.sis.internal.util.UnmodifiableArrayList;
/**
* Place holder for some functionalities defined only in JDK9.
* This file will be deleted on the SIS JDK9 branch.
*
* @author Martin Desruisseaux (Geomatys)
* @since 1.1
* @version 0.8
* @module
*/
public final class JDK9 {
/**
* Do not allow instantiation of this class.
*/
private JDK9() {
}
/**
* Placeholder for {@code List.of(...)}.
*
* @param <E> type of elements.
* @param elements the elements to put in an unmodifiable list.
* @return an unmodifiable list of the given elements.
*/
@SafeVarargs
public static <E> List<E> listOf(final E... elements) {
switch (elements.length) {
case 0: return Collections.emptyList();
case 1: return Collections.singletonList(elements[0]);
default: return UnmodifiableArrayList.wrap(elements);
}
}
/**
* Placeholder for {@code Set.of(...)}.
*
* @param <E> type of elements.
* @param elements the elements to put in an unmodifiable set.
* @return an unmodifiable set of the given elements.
*/
@SafeVarargs
public static <E> Set<E> setOf(final E... elements) {
switch (elements.length) {
case 0: return Collections.emptySet();
case 1: return Collections.singleton(elements[0]);
default: return Collections.unmodifiableSet(new LinkedHashSet<>(Arrays.asList(elements)));
}
}
/**
* Place holder for {@code Buffer.slice()}.
*
* @param b the buffer to slice.
* @return the sliced buffer.
*/
public static Buffer slice(Buffer b) {
if (b instanceof ByteBuffer) return ((ByteBuffer) b).slice();
if (b instanceof ShortBuffer) return ((ShortBuffer) b).slice();
if (b instanceof IntBuffer) return ((IntBuffer) b).slice();
if (b instanceof LongBuffer) return ((LongBuffer) b).slice();
if (b instanceof FloatBuffer) return ((FloatBuffer) b).slice();
if (b instanceof DoubleBuffer) return ((DoubleBuffer) b).slice();
throw new IllegalArgumentException();
}
/**
* Place holder for {@code Buffer.duplicate()}.
*
* @param b the buffer to duplicate.
* @return the duplicate buffer.
*/
public static Buffer duplicate(Buffer b) {
if (b instanceof ByteBuffer) return ((ByteBuffer) b).duplicate();
if (b instanceof ShortBuffer) return ((ShortBuffer) b).duplicate();
if (b instanceof IntBuffer) return ((IntBuffer) b).duplicate();
if (b instanceof LongBuffer) return ((LongBuffer) b).duplicate();
if (b instanceof FloatBuffer) return ((FloatBuffer) b).duplicate();
if (b instanceof DoubleBuffer) return ((DoubleBuffer) b).duplicate();
throw new IllegalArgumentException();
}
/**
* Place holder for {@code Class.getPackageName()}.
*
* @param c the class for which to get the package name.
* @return the name of the package.
*/
public static String getPackageName(Class<?> c) {
Class<?> outer;
while ((outer = c.getEnclosingClass()) != null) {
c = outer;
}
String name = c.getName();
final int separator = name.lastIndexOf('.');
name = (separator >= 1) ? name.substring(0, separator) : "";
return name;
}
}