/* * Copyright 2016-present Open Networking Laboratory * * 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.onosproject.store.service; import org.onosproject.store.primitives.DefaultConsistentTreeMap; import java.util.Map; import java.util.NavigableMap; import java.util.NavigableSet; import java.util.concurrent.CompletableFuture; import static org.onosproject.store.service.DistributedPrimitive.DEFAULT_OPERTATION_TIMEOUT_MILLIS; /** * API for a distributed tree map implementation. */ public interface AsyncConsistentTreeMap<V> extends AsyncConsistentMap<String, V> { /** * Return the lowest key in the map. * * @return the key or null if none exist */ CompletableFuture<String> firstKey(); /** * Return the highest key in the map. * * @return the key or null if none exist */ CompletableFuture<String> lastKey(); /** * Returns the entry associated with the least key greater than or equal to * the key. * * @param key the key * @return the entry or null if no suitable key exists */ CompletableFuture<Map.Entry<String, Versioned<V>>> ceilingEntry( String key); /** * Returns the entry associated with the greatest key less than or equal * to key. * * @param key the key * @return the entry or null if no suitable key exists */ CompletableFuture<Map.Entry<String, Versioned<V>>> floorEntry(String key); /** * Returns the entry associated with the least key greater than key. * * @param key the key * @return the entry or null if no suitable key exists */ CompletableFuture<Map.Entry<String, Versioned<V>>> higherEntry(String key); /** * Returns the entry associated with the largest key less than key. * * @param key the key * @return the entry or null if no suitable key exists */ CompletableFuture<Map.Entry<String, Versioned<V>>> lowerEntry(String key); /** * Return the entry associated with the lowest key in the map. * * @return the entry or null if none exist */ CompletableFuture<Map.Entry<String, Versioned<V>>> firstEntry(); /** * Return the entry associated with the highest key in the map. * * @return the entry or null if none exist */ CompletableFuture<Map.Entry<String, Versioned<V>>> lastEntry(); /** * Return and remove the entry associated with the lowest key. * * @return the entry or null if none exist */ CompletableFuture<Map.Entry<String, Versioned<V>>> pollFirstEntry(); /** * Return and remove the entry associated with the highest key. * * @return the entry or null if none exist */ CompletableFuture<Map.Entry<String, Versioned<V>>> pollLastEntry(); /** * Return the entry associated with the greatest key less than key. * * @param key the key * @return the entry or null if no suitable key exists */ CompletableFuture<String> lowerKey(String key); /** * Return the highest key less than or equal to key. * * @param key the key * @return the entry or null if no suitable key exists */ CompletableFuture<String> floorKey(String key); /** * Return the lowest key greater than or equal to key. * * @param key the key * @return the entry or null if no suitable key exists */ CompletableFuture<String> ceilingKey(String key); /** * Return the lowest key greater than key. * * @param key the key * @return the entry or null if no suitable key exists */ CompletableFuture<String> higherKey(String key); /** * Returns a navigable set of the keys in this map. * * @return a navigable key set (this may be empty) */ CompletableFuture<NavigableSet<String>> navigableKeySet(); /** * Returns a navigable map containing the entries from the original map * which are larger than (or if specified equal to) {@code lowerKey} AND * less than (or if specified equal to) {@code upperKey}. * * @param upperKey the upper bound for the keys in this map * @param lowerKey the lower bound for the keys in this map * @param inclusiveUpper whether keys equal to the upperKey should be * included * @param inclusiveLower whether keys equal to the lowerKey should be * included * @return a navigable map containing entries in the specified range (this * may be empty) */ CompletableFuture<NavigableMap<String, V>> subMap(String upperKey, String lowerKey, boolean inclusiveUpper, boolean inclusiveLower); default ConsistentTreeMap<V> asTreeMap() { return asTreeMap(DEFAULT_OPERTATION_TIMEOUT_MILLIS); } default ConsistentTreeMap<V> asTreeMap(long timeoutMillis) { return new DefaultConsistentTreeMap<>(this, timeoutMillis); } }