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

com.hazelcast.jet.impl.aggregate.AggregateOperation3Impl Maven / Gradle / Ivy

There is a newer version: 4.5.4
Show newest version
/*
 * Copyright (c) 2008-2018, Hazelcast, Inc. 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.hazelcast.jet.impl.aggregate;

import com.hazelcast.jet.aggregate.AggregateOperation3;
import com.hazelcast.jet.datamodel.Tag;
import com.hazelcast.jet.function.DistributedBiConsumer;
import com.hazelcast.jet.function.DistributedFunction;
import com.hazelcast.jet.function.DistributedSupplier;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;

public class AggregateOperation3Impl
        extends AggregateOperationImpl
        implements AggregateOperation3 {

    public AggregateOperation3Impl(@Nonnull DistributedSupplier createAccumulatorFn,
                                   @Nonnull DistributedBiConsumer accumulateItemF0,
                                   @Nonnull DistributedBiConsumer accumulateItemF1,
                                   @Nonnull DistributedBiConsumer accumulateItemF2,
                                   @Nullable DistributedBiConsumer combineAccumulatorsFn,
                                   @Nullable DistributedBiConsumer deductAccumulatorFn,
                                   @Nonnull DistributedFunction finishAccumulationFn
    ) {
        super(createAccumulatorFn, accumulateFns(accumulateItemF0, accumulateItemF1, accumulateItemF2),
                combineAccumulatorsFn, deductAccumulatorFn, finishAccumulationFn);
    }

    private AggregateOperation3Impl(@Nonnull DistributedSupplier createAccumulatorFn,
                                    @Nonnull DistributedBiConsumer[] accumulateFs,
                                    @Nullable DistributedBiConsumer combineAccumulatorsFn,
                                    @Nullable DistributedBiConsumer deductAccumulatorFn,
                                    @Nonnull DistributedFunction finishAccumulationFn
    ) {
        super(createAccumulatorFn, accumulateFs, combineAccumulatorsFn, deductAccumulatorFn, finishAccumulationFn);
    }

    @Nonnull @Override
    @SuppressWarnings("unchecked")
    public DistributedBiConsumer accumulateFn0() {
        return (DistributedBiConsumer) accumulateFns[0];
    }

    @Nonnull @Override
    @SuppressWarnings("unchecked")
    public DistributedBiConsumer accumulateFn1() {
        return (DistributedBiConsumer) accumulateFns[1];
    }

    @Nonnull @Override
    @SuppressWarnings("unchecked")
    public DistributedBiConsumer accumulateFn2() {
        return (DistributedBiConsumer) accumulateFns[2];
    }

    @Nonnull @Override
    public  AggregateOperation3 withAccumulateFn0(
            @Nonnull DistributedBiConsumer newAccFn0
    ) {
        return new AggregateOperation3Impl<>(
                createFn(), newAccFn0, accumulateFn1(), accumulateFn2(), combineFn(), deductFn(), finishFn());
    }

    @Nonnull @Override
    public  AggregateOperation3 withAccumulateFn1(
            @Nonnull DistributedBiConsumer newAccFn1
    ) {
        return new AggregateOperation3Impl<>(
                createFn(), accumulateFn0(), newAccFn1, accumulateFn2(), combineFn(), deductFn(), finishFn());
    }

    @Nonnull @Override
    public  AggregateOperation3 withAccumulateFn2(
            @Nonnull DistributedBiConsumer newAccFn2
    ) {
        return new AggregateOperation3Impl<>(
                createFn(), accumulateFn0(), accumulateFn1(), newAccFn2, combineFn(), deductFn(), finishFn());
    }

    @Nonnull @Override
    @SuppressWarnings("unchecked")
    public  DistributedBiConsumer accumulateFn(Tag tag) {
        if (tag.index() > 2) {
            throw new IllegalArgumentException(
                    "AggregateOperation3 only recognizes tags with index 0, 1 and 2, but asked for " + tag.index());
        }
        return (DistributedBiConsumer) accumulateFns[tag.index()];
    }

    @Nonnull
    @Override
    public  AggregateOperation3 withFinishFn(
            @Nonnull DistributedFunction finishFn
    ) {
        return new AggregateOperation3Impl<>(createFn(), accumulateFns, combineFn(), deductFn(), finishFn);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy