/*
* Copyright 2015 Ben Manes. All Rights Reserved.
*
* 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.github.benmanes.caffeine.cache.simulator.admission;
import java.util.function.BiFunction;
import java.util.function.Function;
import com.github.benmanes.caffeine.cache.simulator.policy.PolicyStats;
import com.typesafe.config.Config;
/**
* The admission policies.
*
* @author ben.manes@gmail.com (Ben Manes)
*/
@SuppressWarnings("ImmutableEnumChecker")
public enum Admission {
ALWAYS((config, policyStats) -> Admittor.always(), Function.identity()),
TINYLFU(TinyLfu::new, name -> name + "_TinyLfu");
private final BiFunction<Config, PolicyStats, Admittor> factory;
private final Function<String, String> formatter;
Admission(BiFunction<Config, PolicyStats, Admittor> factory, Function<String, String> formatter) {
this.formatter = formatter;
this.factory = factory;
}
/**
* Returns a configured admittor.
*
* @param config the configuration
* @param policyStats the stats
* @return an admission policy
*/
public Admittor from(Config config, PolicyStats policyStats) {
return factory.apply(config, policyStats);
}
/** Returns the policy's formatted name. */
public String format(String name) {
return formatter.apply(name);
}
}