11d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/*
21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Copyright (C) 2010 The Guava Authors
31d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert *
41d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Licensed under the Apache License, Version 2.0 (the "License");
51d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * you may not use this file except in compliance with the License.
61d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * You may obtain a copy of the License at
71d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert *
81d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert *      http://www.apache.org/licenses/LICENSE-2.0
91d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert *
101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Unless required by applicable law or agreed to in writing, software
111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * distributed under the License is distributed on an "AS-IS" BASIS,
121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * See the License for the specific language governing permissions and
141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * limitations under the License.
151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */
161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpackage com.google.common.collect;
181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.Beta;
201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtCompatible;
211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.base.Function;
221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.concurrent.ConcurrentMap;
241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.concurrent.TimeUnit;
251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/**
271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * A class exactly like {@link MapMaker}, except restricted in the types of maps it can build.
281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * For the most part, you should probably just ignore the existence of this class.
291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert *
301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @param  the base type for all key types of maps built by this map maker
311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @param  the base type for all value types of maps built by this map maker
321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Kevin Bourrillion
331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @since 7.0
341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */
351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@Beta
361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@GwtCompatible(emulated = true)
371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic abstract class GenericMapMaker<K0, V0> {
381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  // Set by MapMaker, but sits in this class to preserve the type relationship
401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  // No subclasses but our own
421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  GenericMapMaker() {}
431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * See {@link MapMaker#initialCapacity}.
461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public abstract GenericMapMaker<K0, V0> initialCapacity(int initialCapacity);
481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * See {@link MapMaker#maximumSize}.
511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  abstract GenericMapMaker<K0, V0> maximumSize(int maximumSize);
531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * See {@link MapMaker#strongKeys}.
561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  abstract GenericMapMaker<K0, V0> strongKeys();
581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * See {@link MapMaker#concurrencyLevel}.
611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public abstract GenericMapMaker<K0, V0> concurrencyLevel(int concurrencyLevel);
631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * See {@link MapMaker#strongValues}.
661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  abstract GenericMapMaker<K0, V0> strongValues();
681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * See {@link MapMaker#expiration}.
711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @Deprecated
731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public
741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  abstract GenericMapMaker<K0, V0> expiration(long duration, TimeUnit unit);
751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * See {@link MapMaker#expireAfterWrite}.
781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  abstract GenericMapMaker<K0, V0> expireAfterWrite(long duration, TimeUnit unit);
801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /*
821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * Note that MapMaker's removalListener() is not here, because once you're interacting with a
831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * GenericMapMaker you've already called that, and shouldn't be calling it again.
841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * See {@link MapMaker#makeMap}.
881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public abstract <K extends K0, V extends V0> ConcurrentMap<K, V> makeMap();
901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * See {@link MapMaker#makeComputingMap}.
931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @Deprecated
951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public abstract <K extends K0, V extends V0> ConcurrentMap<K, V> makeComputingMap(
961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      Function<? super K, ? extends V> computingFunction);
971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert}
98