summaryrefslogtreecommitdiffstats
path: root/guava/src/com/google/common/cache/Cache.java
diff options
context:
space:
mode:
Diffstat (limited to 'guava/src/com/google/common/cache/Cache.java')
-rw-r--r--guava/src/com/google/common/cache/Cache.java147
1 files changed, 147 insertions, 0 deletions
diff --git a/guava/src/com/google/common/cache/Cache.java b/guava/src/com/google/common/cache/Cache.java
new file mode 100644
index 0000000..cfe5764
--- /dev/null
+++ b/guava/src/com/google/common/cache/Cache.java
@@ -0,0 +1,147 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * 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 com.google.common.cache;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.util.concurrent.ExecutionError;
+import com.google.common.util.concurrent.UncheckedExecutionException;
+
+import java.util.Map;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.ExecutionException;
+
+import javax.annotation.Nullable;
+
+/**
+ * A semi-persistent mapping from keys to values. Cache entries are manually added using
+ * {@link #get(Object, Callable)} or {@link #put(Object, Object)}, and are stored in the cache until
+ * either evicted or manually invalidated.
+ *
+ * <p>Implementations of this interface are expected to be thread-safe, and can be safely accessed
+ * by multiple concurrent threads.
+ *
+ * <p>Note that while this class is still annotated as {@link Beta}, the API is frozen from a
+ * consumer's standpoint. In other words existing methods are all considered {@code non-Beta} and
+ * won't be changed without going through an 18 month deprecation cycle; however new methods may be
+ * added at any time.
+ *
+ * @author Charles Fry
+ * @since 10.0
+ */
+@Beta
+@GwtCompatible
+public interface Cache<K, V> {
+
+ /**
+ * Returns the value associated with {@code key} in this cache, or {@code null} if there is no
+ * cached value for {@code key}.
+ *
+ * @since 11.0
+ */
+ @Nullable
+ V getIfPresent(Object key);
+
+ /**
+ * Returns the value associated with {@code key} in this cache, obtaining that value from
+ * {@code valueLoader} if necessary. No observable state associated with this cache is modified
+ * until loading completes. This method provides a simple substitute for the conventional
+ * "if cached, return; otherwise create, cache and return" pattern.
+ *
+ * <p><b>Warning:</b> as with {@link CacheLoader#load}, {@code valueLoader} <b>must not</b> return
+ * {@code null}; it may either return a non-null value or throw an exception.
+ *
+ * @throws ExecutionException if a checked exception was thrown while loading the value
+ * @throws UncheckedExecutionException if an unchecked exception was thrown while loading the
+ * value
+ * @throws ExecutionError if an error was thrown while loading the value
+ *
+ * @since 11.0
+ */
+ V get(K key, Callable<? extends V> valueLoader) throws ExecutionException;
+
+ /**
+ * Returns a map of the values associated with {@code keys} in this cache. The returned map will
+ * only contain entries which are already present in the cache.
+ *
+ * @since 11.0
+ */
+ ImmutableMap<K, V> getAllPresent(Iterable<?> keys);
+
+ /**
+ * Associates {@code value} with {@code key} in this cache. If the cache previously contained a
+ * value associated with {@code key}, the old value is replaced by {@code value}.
+ *
+ * <p>Prefer {@link #get(Object, Callable)} when using the conventional "if cached, return;
+ * otherwise create, cache and return" pattern.
+ *
+ * @since 11.0
+ */
+ void put(K key, V value);
+
+ /**
+ * Copies all of the mappings from the specified map to the cache. The effect of this call is
+ * equivalent to that of calling {@code put(k, v)} on this map once for each mapping from key
+ * {@code k} to value {@code v} in the specified map. The behavior of this operation is undefined
+ * if the specified map is modified while the operation is in progress.
+ *
+ * @since 12.0
+ */
+ void putAll(Map<? extends K,? extends V> m);
+
+ /**
+ * Discards any cached value for key {@code key}.
+ */
+ void invalidate(Object key);
+
+ /**
+ * Discards any cached values for keys {@code keys}.
+ *
+ * @since 11.0
+ */
+ void invalidateAll(Iterable<?> keys);
+
+ /**
+ * Discards all entries in the cache.
+ */
+ void invalidateAll();
+
+ /**
+ * Returns the approximate number of entries in this cache.
+ */
+ long size();
+
+ /**
+ * Returns a current snapshot of this cache's cumulative statistics. All stats are initialized
+ * to zero, and are monotonically increasing over the lifetime of the cache.
+ */
+ CacheStats stats();
+
+ /**
+ * Returns a view of the entries stored in this cache as a thread-safe map. Modifications made to
+ * the map directly affect the cache.
+ */
+ ConcurrentMap<K, V> asMap();
+
+ /**
+ * Performs any pending maintenance operations needed by the cache. Exactly which activities are
+ * performed -- if any -- is implementation-dependent.
+ */
+ void cleanUp();
+}