2 * (C) Copyright 2016 Pantheon Technologies, s.r.o. and others.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package org.opendaylight.yangtools.triemap;
18 import static java.util.Objects.requireNonNull;
20 import com.google.common.collect.Iterators;
21 import java.util.AbstractSet;
22 import java.util.Collection;
23 import java.util.Map.Entry;
24 import java.util.Spliterator;
25 import java.util.Spliterators;
28 * Abstract base class for key set views of a TrieMap.
30 * @author Robert Varga
32 * @param <K> the type of keys
34 abstract class AbstractKeySet<K> extends AbstractSet<K> {
35 private final TrieMap<K, ?> map;
37 AbstractKeySet(final TrieMap<K, ?> map) {
38 this.map = requireNonNull(map);
41 final TrieMap<K, ?> map() {
46 @SuppressWarnings("checkstyle:parameterName")
47 public final boolean add(final K e) {
48 throw new UnsupportedOperationException();
52 @SuppressWarnings("checkstyle:parameterName")
53 public final boolean addAll(final Collection<? extends K> c) {
54 throw new UnsupportedOperationException();
58 @SuppressWarnings("checkstyle:parameterName")
59 public final boolean contains(final Object o) {
60 return map.containsKey(o);
64 public final boolean isEmpty() {
69 public final int size() {
74 public final Spliterator<K> spliterator() {
75 // TODO: this is backed by an Iterator, we should be able to do better
76 return Spliterators.spliterator(Iterators.transform(map().immutableIterator(), Entry::getKey), Long.MAX_VALUE,
77 spliteratorCharacteristics());
80 abstract int spliteratorCharacteristics();