/* * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors * * SPDX-License-Identifier: EPL-2.0 */ package tools.refinery.store.query.viatra.internal.pquery; import org.eclipse.viatra.query.runtime.matchers.psystem.aggregations.IMultisetAggregationOperator; import tools.refinery.store.query.term.StatefulAggregate; import tools.refinery.store.query.term.StatefulAggregator; import java.util.stream.Stream; record StatefulMultisetAggregator(StatefulAggregator aggregator) implements IMultisetAggregationOperator, R> { @Override public String getShortDescription() { return getName(); } @Override public String getName() { return aggregator.toString(); } @Override public StatefulAggregate createNeutral() { return aggregator.createEmptyAggregate(); } @Override public boolean isNeutral(StatefulAggregate result) { return result.isEmpty(); } @Override public StatefulAggregate update(StatefulAggregate oldResult, T updateValue, boolean isInsertion) { if (isInsertion) { oldResult.add(updateValue); } else { oldResult.remove(updateValue); } return oldResult; } @Override public R getAggregate(StatefulAggregate result) { return result.getResult(); } @Override public R aggregateStream(Stream stream) { return aggregator.aggregateStream(stream); } @Override public StatefulAggregate clone(StatefulAggregate original) { return original.deepCopy(); } @Override public boolean contains(T value, StatefulAggregate accumulator) { return accumulator.contains(value); } }