All Downloads are FREE. Search and download functionalities are using the official Maven repository.

wtf.metio.memoization.jool.Consumer4Memoizer Maven / Gradle / Ivy

/*
 * SPDX-FileCopyrightText: The memoization.java Authors
 * SPDX-License-Identifier: 0BSD
 */

package wtf.metio.memoization.jool;

import org.jooq.lambda.function.Consumer4;
import org.jooq.lambda.function.Function4;
import wtf.metio.memoization.core.AbstractMemoizer;

import java.util.concurrent.ConcurrentMap;

import static java.util.Objects.requireNonNull;

final class Consumer4Memoizer
        extends AbstractMemoizer
        implements Consumer4 {

    private final Function4 keyFunction;
    private final Consumer4 consumer;

    Consumer4Memoizer(
            final ConcurrentMap cache,
            final Function4 keyFunction,
            final Consumer4 consumer) {
        super(cache);
        this.keyFunction = requireNonNull(keyFunction, "Provide a key function.");
        this.consumer = requireNonNull(consumer,
                "Cannot memoize a NULL Consumer4 - provide an actual Consumer4 to fix this.");
    }

    @Override
    public void accept(final TYPE1 v1, final TYPE2 v2, final TYPE3 v3, final TYPE4 v4) {
        computeIfAbsent(keyFunction.apply(v1, v2, v3, v4), key -> {
            consumer.accept(v1, v2, v3, v4);
            return key;
        });
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy