util: Extract non-Android utility interfaces

As part of a refactoring that will likely introduce more custom
collection classes, move the non-Android-specific parts outside the
com.wireguard.android package.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
Samuel Holland
2018-06-19 21:59:44 -05:00
parent d3a8291a7a
commit 4acee49d4b
10 changed files with 17 additions and 9 deletions
@@ -0,0 +1,14 @@
/*
* Copyright © 2018 Samuel Holland <samuel@sholland.org>
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package com.wireguard.util;
/**
* Interface for objects that have a identifying key of the given type.
*/
public interface Keyed<K> {
K getKey();
}
@@ -0,0 +1,28 @@
/*
* Copyright © 2018 Samuel Holland <samuel@sholland.org>
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package com.wireguard.util;
import java.util.Collection;
import java.util.List;
/**
* A list containing elements that can be looked up by key. A {@code KeyedList} cannot contain
* {@code null} elements.
*/
public interface KeyedList<K, E extends Keyed<? extends K>> extends List<E> {
boolean containsAllKeys(Collection<K> keys);
boolean containsKey(K key);
E get(K key);
E getLast(K key);
int indexOfKey(K key);
int lastIndexOfKey(K key);
}
@@ -0,0 +1,27 @@
/*
* Copyright © 2018 Samuel Holland <samuel@sholland.org>
* SPDX-License-Identifier: GPL-2.0-or-later
*/
package com.wireguard.util;
import java.util.Collection;
import java.util.Comparator;
import java.util.Set;
/**
* A keyed list where all elements are sorted by the comparator returned by {@code comparator()}
* applied to their keys.
*/
public interface SortedKeyedList<K, E extends Keyed<? extends K>> extends KeyedList<K, E> {
Comparator<? super K> comparator();
K firstKey();
Set<K> keySet();
K lastKey();
Collection<E> values();
}