package org.infinispan.objectfilter.impl.aggregation; /** * Counts the encountered values and returns a {@code Long} greater or equal than 0. Null values are not counted. If * there are no non-null values to which COUNT can be applied, the result of the aggregate function is 0. * * @author anistor@redhat.com * @since 8.0 */ final class CountAccumulator extends FieldAccumulator { CountAccumulator(int inPos, int outPos) { super(inPos, outPos); } @Override public void init(Object[] accRow) { accRow[outPos] = new Counter(); } @Override protected void merge(Object[] accRow, Object value) { if (value instanceof Counter) { ((Counter) accRow[outPos]).add(((Counter) value).getValue()); } else if (value != null) { ((Counter) accRow[outPos]).add(1); } } @Override public void update(Object[] accRow, Object value) { if (value != null) { ((Counter) accRow[outPos]).inc(); } } @Override protected void finish(Object[] accRow) { accRow[outPos] = ((Counter) accRow[outPos]).getValue(); } }