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

com.yelstream.topp.standard.util.SupplierBuilders Maven / Gradle / Ivy

The newest version!
/*
 * Project: Topp Standard
 * GitHub: https://github.com/sabroe/Topp-Standard
 *
 * Copyright 2024 Morten Sabroe Mortensen
 *
 * 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.yelstream.topp.standard.util;

import com.yelstream.topp.standard.util.function.MemoizedIntSupplier;
import com.yelstream.topp.standard.util.function.MemoizedSupplier;
import lombok.Singular;
import lombok.experimental.UtilityClass;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.IntSupplier;
import java.util.function.Supplier;

@UtilityClass
public class SupplierBuilders {

    @lombok.Builder(builderClassName="SupplierBuilder",builderMethodName="supplierBuilder")
    private static  Supplier createSupplier(Supplier source,
                                                  MemoizedSupplier.Strategy memoized,
                                                  @Singular List>> consumers) {
        Supplier supplier=createSupplier(source,memoized);
        notify(supplier,consumers);
        return supplier;
    }

    private static  Supplier createSupplier(Supplier source,
                                                  MemoizedSupplier.Strategy memoized) {
        Supplier supplier=source;
        if (memoized!=null) {
            supplier=memoized.of(supplier);
        }
        return supplier;
    }

    private static  void notify(Supplier supplier,
                                   List>> consumers) {
        if (consumers!=null) {
            consumers.forEach(consumer->consumer.accept(supplier));
        }
    }

    public static class SupplierBuilder {
        private Supplier source=null;

        private MemoizedSupplier.Strategy memoized=null;

        private final List>> consumer=new ArrayList<>();

        public SupplierBuilder source(T value) {
            source=()->value;
            return this;
        }
    }

    @lombok.Builder(builderClassName="IntSupplierBuilder",builderMethodName="intSupplierBuilder")
    private static IntSupplier createIntSupplier(IntSupplier source,
                                                 MemoizedIntSupplier.Strategy memoized,
                                                 @Singular List> consumers) {
        IntSupplier supplier=createIntSupplier(source,memoized);
        notify(supplier,consumers);
        return supplier;
    }

    private static IntSupplier createIntSupplier(IntSupplier source,
                                                 MemoizedIntSupplier.Strategy memoized) {
        IntSupplier supplier=source;
        if (memoized!=null) {
            supplier=memoized.of(supplier);
        }
        return supplier;
    }

    private static void notify(IntSupplier supplier,
                               List> consumers) {
        if (consumers!=null) {
            consumers.forEach(consumer->consumer.accept(supplier));
        }
    }

    public static class IntSupplierBuilder {
        private IntSupplier source=null;

        private MemoizedIntSupplier.Strategy memoized=null;

        private final List> consumer=new ArrayList<>();

        public IntSupplierBuilder source(int value) {
            source=()->value;
            return this;
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy