@Override public int weigh(K key, V value) { int weight = delegate.weigh(key, value); Caffeine.requireArgument(weight >= 0); return weight; }
/** Returns if entries may be assigned different weights. */ protected boolean isWeighted() { return (weigher != Weigher.singletonWeigher()); }
@NonNull @SuppressWarnings({"unchecked", "rawtypes"}) <K1 extends K, V1 extends V> Weigher<K1, V1> getWeigher(boolean isAsync) { Weigher<K1, V1> delegate = (weigher == null) || (weigher == Weigher.singletonWeigher()) ? Weigher.singletonWeigher() : Weigher.boundedWeigher((Weigher<K1, V1>) weigher); return isAsync ? (Weigher<K1, V1>) new AsyncWeigher(delegate) : delegate; }
@Override public int weigh(K key, V value) { return weigher.weigh(key, value); } }
@Test(expectedExceptions = IllegalStateException.class) public void weigher_twice() { Caffeine.newBuilder().weigher(Weigher.singletonWeigher()).weigher(Weigher.singletonWeigher()); }
@Nonnull @SuppressWarnings({"unchecked", "rawtypes"}) <K1 extends K, V1 extends V> Weigher<K1, V1> getWeigher(boolean isAsync) { Weigher<K1, V1> delegate = (weigher == null) || (weigher == Weigher.singletonWeigher()) ? Weigher.singletonWeigher() : Weigher.boundedWeigher((Weigher<K1, V1>) weigher); return isAsync ? (Weigher<K1, V1>) new AsyncWeigher(delegate) : delegate; }
@Override public int weigh(K key, CompletableFuture<V> future) { return isReady(future) ? delegate.weigh(key, future.join()) : 0; }
@Test public void maximumWeight_small() { Caffeine<?, ?> builder = Caffeine.newBuilder() .maximumWeight(0).weigher(Weigher.singletonWeigher()); assertThat(builder.weigher, is(Weigher.singletonWeigher())); assertThat(builder.maximumWeight, is(0L)); Eviction<?, ?> eviction = builder.build().policy().eviction().get(); assertThat(eviction.getMaximum(), is(0L)); assertThat(eviction.isWeighted(), is(true)); }
/** Configures the maximum weight and returns if set. */ private boolean configureMaximumWeight() { if (config.getMaximumWeight().isPresent()) { caffeine.maximumWeight(config.getMaximumWeight().getAsLong()); Weigher<K, V> weigher = config.getWeigherFactory().map(Factory::create) .orElseThrow(() -> new IllegalStateException("Weigher not configured")); caffeine.weigher((K key, Expirable<V> expirable) -> { return weigher.weigh(key, expirable.get()); }); } return config.getMaximumWeight().isPresent(); }
@Test public void maximumWeight_large() { Caffeine<?, ?> builder = Caffeine.newBuilder() .maximumWeight(Integer.MAX_VALUE).weigher(Weigher.singletonWeigher()); assertThat(builder.maximumWeight, is((long) Integer.MAX_VALUE)); assertThat(builder.weigher, is(Weigher.singletonWeigher())); Eviction<?, ?> eviction = builder.build().policy().eviction().get(); assertThat(eviction.getMaximum(), is((long) Integer.MAX_VALUE)); assertThat(eviction.isWeighted(), is(true)); }
desc.expectThat("weight", node.getWeight(), is(weigher.weigh(key, value)));
@Test(expectedExceptions = IllegalStateException.class) public void maximumSize_weigher() { Caffeine.newBuilder().weigher(Weigher.singletonWeigher()).maximumSize(1); }
requireNonNull(newValue); int weight = weigher.weigh(key, newValue); boolean[] replaced = new boolean[1]; @SuppressWarnings("unchecked")
@Test(expectedExceptions = IllegalStateException.class) public void weigher_maximumSize() { Caffeine.newBuilder().maximumSize(1).weigher(Weigher.singletonWeigher()); }
V[] oldValue = (V[]) new Object[1]; long[] now = new long[1]; int weight = weigher.weigh(key, value); Node<K, V> node = data.computeIfPresent(nodeFactory.newLookupKey(key), (k, n) -> { synchronized (n) {
@Test(expectedExceptions = IllegalStateException.class) public void weigher_noMaximumWeight() { Caffeine.newBuilder().weigher(Weigher.singletonWeigher()).build(); }
@Override public int weigh(K key, V value) { int weight = delegate.weigh(key, value); Caffeine.requireArgument(weight >= 0); return weight; }
/** Returns if entries may be assigned different weights. */ protected boolean isWeighted() { return (weigher != Weigher.singletonWeigher()); }
@Override public int weigh(K key, CompletableFuture<V> future) { return isReady(future) ? delegate.weigh(key, future.join()) : 0; }