class EquatableValueSet implements ValueSet {

    private static Block subtract(BlockAllocator allocator, EquatableValueSet left, EquatableValueSet right)
    {
        Block resultBlock = BlockUtils.newEmptyBlock(allocator, DEFAULT_COLUMN, left.getType());
        FieldVector result = resultBlock.getFieldVector(DEFAULT_COLUMN);

        Block lhsBlock = left.getValues();

        FieldReader lhs = lhsBlock.getFieldReader(DEFAULT_COLUMN);

        int count = 0;
        for (int i = 0; i < lhsBlock.getRowCount(); i++) {
            lhs.setPosition(i);
            if (!isPresent(lhs.readObject(), right.valueBlock)) {
                BlockUtils.setValue(result, count++, lhs.readObject());
            }
        }
        resultBlock.setRowCount(count);
        return resultBlock;
    }

    @JsonCreator public  EquatableValueSet(
            @JsonProperty("valueBlock") Block valueBlock,
            @JsonProperty("whiteList") boolean whiteList,
            @JsonProperty("nullAllowed") boolean nullAllowed);

}