protected void processInput(GroupByIdBlock groupIdsBlock, Block valuesBlock, Optional<Block> maskBlock)
{
notNull.ensureCapacity(groupIdsBlock.getGroupCount());
sums.ensureCapacity(groupIdsBlock.getGroupCount());
BlockCursor values = valuesBlock.cursor();
BlockCursor masks = null;
if (maskBlock.isPresent()) {
masks = maskBlock.get().cursor();
}
for (int position = 0; position < groupIdsBlock.getPositionCount(); position++) {
checkState(values.advanceNextPosition());
checkState(masks == null || masks.advanceNextPosition());
long groupId = groupIdsBlock.getGroupId(position);
if (!values.isNull() && (masks == null || masks.getBoolean())) {
notNull.set(groupId, true);
double value = values.getDouble();
sums.add(groupId, value);
}