| /* |
| * 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.lisp.ctl.map; |
| |
| import java.util.Set; |
| |
| /** |
| * A {@link java.util.concurrent.ConcurrentMap} that supports timed entry |
| * eviction. |
| */ |
| public interface ExpireMap<K, V> { |
| |
| /** |
| * Associates the specified value with the specified key in this map for the |
| * specified duration (optional operation). If the map previously contained |
| * a mapping for the key, the old value is replaced by the specified value. |
| * |
| * @param key key with which the specified value is to be associated |
| * @param value value to be associated with the specified key |
| * @param expireMs the maximum amount of time in ms during which the map |
| * entry should remain in the map, this can also be |
| * considered as (time-to-live: TTL) value. Note that when |
| * we assign a value of 0, the map entry will be immediately |
| * remove from the map. |
| * |
| * @throws UnsupportedOperationException if the <tt>put</tt> operation |
| * is not supported by this map |
| * @throws ClassCastException if the class of the specified key or value |
| * prevents it from being stored in this map |
| * @throws NullPointerException if the specified key or value is null |
| * and this map does not permit null keys or values |
| * @throws IllegalArgumentException if some property of the specified key |
| * or value prevents it from being stored in this map |
| */ |
| void put(K key, V value, long expireMs); |
| |
| /** |
| * Associates the specified value with the specified key in this map for the |
| * specified duration (optional operation). If the map previously contained |
| * a mapping for the key, the old value is replaced by the specified value. |
| * With this method, we can specify the expireMs with default value. |
| * |
| * @param key key with which the specified value is to be associated |
| * @param value value to be associated with the specified key |
| * |
| * @throws UnsupportedOperationException if the <tt>put</tt> operation |
| * is not supported by this map |
| * @throws ClassCastException if the class of the specified key or value |
| * prevents it from being stored in this map |
| * @throws NullPointerException if the specified key or value is null |
| * and this map does not permit null keys or values |
| * @throws IllegalArgumentException if some property of the specified key |
| * or value prevents it from being stored in this map |
| */ |
| void put(K key, V value); |
| |
| /** |
| * Returns the value to which the specified key is mapped, |
| * or {@code null} if this map contains no mapping for the key. |
| * |
| * @param key the key whose associated value is to be returned |
| * @return the value to which the specified key is mapped, or |
| * {@code null} if this map contains no mapping for the key |
| * @throws ClassCastException if the key is of an inappropriate type for |
| * this map |
| * @throws NullPointerException if the specified key is null and this map |
| * does not permit null keys |
| */ |
| V get(K key); |
| |
| /** |
| * Removes all of the mappings from this map (optional operation). |
| * The map will be empty after this call returns. |
| * |
| * @throws UnsupportedOperationException if the <tt>clear</tt> operation |
| * is not supported by this map |
| */ |
| void clear(); |
| |
| /** |
| * Returns <tt>true</tt> if this map contains a mapping for the specified |
| * key. More formally, returns <tt>true</tt> if and only if |
| * this map contains a mapping for a key <tt>k</tt> such that |
| * <tt>(key==null ? k==null : key.equals(k))</tt>. (There can be |
| * at most one such mapping.) |
| * |
| * @param key key whose presence in this map is to be tested |
| * @return <tt>true</tt> if this map contains a mapping for the specified |
| * key |
| * @throws ClassCastException if the key is of an inappropriate type for |
| * this map |
| * @throws NullPointerException if the specified key is null and this map |
| * does not permit null keys |
| */ |
| boolean containsKey(K key); |
| |
| /** |
| * Returns a {@link Set} view of the keys contained in this map. |
| * The set is backed by the map, so changes to the map are |
| * reflected in the set, and vice-versa. If the map is modified |
| * while an iteration over the set is in progress (except through |
| * the iterator's own <tt>remove</tt> operation), the results of |
| * the iteration are undefined. The set supports element removal, |
| * which removes the corresponding mapping from the map, via the |
| * <tt>Iterator.remove</tt>, <tt>Set.remove</tt>, |
| * <tt>removeAll</tt>, <tt>retainAll</tt>, and <tt>clear</tt> |
| * operations. It does not support the <tt>add</tt> or <tt>addAll</tt> |
| * operations. |
| * |
| * @return a set view of the keys contained in this map |
| */ |
| Set<K> keySet(); |
| |
| /** |
| * Returns <tt>true</tt> if this map contains no key-value mappings. |
| * |
| * @return <tt>true</tt> if this map contains no key-value mappings |
| */ |
| boolean isEmpty(); |
| |
| /** |
| * Removes the mapping for a key from this map if it is present |
| * (optional operation). More formally, if this map contains a mapping |
| * from key <tt>k</tt> to value <tt>v</tt> such that |
| * <code>(key==null ? k==null : key.equals(k))</code>, that mapping |
| * is removed. (The map can contain at most one such mapping.) |
| * |
| * @param key key whose mapping is to be removed from the map |
| * @return the previous value associated with <tt>key</tt>, or |
| * <tt>null</tt> if there was no mapping for <tt>key</tt>. |
| * @throws UnsupportedOperationException if the <tt>remove</tt> operation |
| * is not supported by this map |
| * @throws ClassCastException if the key is of an inappropriate type for |
| * this map |
| * @throws NullPointerException if the specified key is null and this |
| * map does not permit null keys |
| */ |
| V remove(K key); |
| |
| /** |
| * Returns the number of key-value mappings in this map. If the |
| * map contains more than <tt>Integer.MAX_VALUE</tt> elements, returns |
| * <tt>Integer.MAX_VALUE</tt>. |
| * |
| * @return the number of key-value mappings in this map |
| */ |
| int size(); |
| } |