private int hashProjectedRow(Row row) {
   int hash = 0;
   for (int f = 0; f < fieldEvals.size(); f++) {
     TEvaluatableExpression fieldEval = fieldEvals.get(f);
     hash = hash ^ expressionAdapter.hash(storeAdapter, fieldEval, row, collator(f));
   }
   return hash;
 }
 public FilterBindingsCursor(
     QueryContext context,
     Cursor input,
     int bindingPosition,
     int depth,
     List<? extends TPreparedExpression> expressions,
     ExpressionAdapter<TPreparedExpression, TEvaluatableExpression> expressionAdapter) {
   super(input, bindingPosition, depth);
   this.storeAdapter = context.getStore();
   this.expressionAdapter = expressionAdapter;
   for (TPreparedExpression field : expressions) {
     TEvaluatableExpression eval = expressionAdapter.evaluate(field, context);
     fieldEvals.add(eval);
   }
 }
 public Select_BloomFilter(
     Operator input,
     Operator onPositive,
     List<? extends TPreparedExpression> tFields,
     List<AkCollator> collators,
     int bindingPosition,
     boolean pipeline,
     int depth) {
   ArgumentValidation.notNull("input", input);
   ArgumentValidation.notNull("onPositive", onPositive);
   ArgumentValidation.notNull("Fields", tFields);
   int size = tFields.size();
   ArgumentValidation.isGT("fields.size()", size, 0);
   ArgumentValidation.isGTE("bindingPosition", bindingPosition, 0);
   ArgumentValidation.isGT("depth", depth, 0);
   this.input = input;
   this.onPositive = onPositive;
   this.bindingPosition = bindingPosition;
   this.pipeline = pipeline;
   this.depth = depth;
   this.tFields = tFields;
   this.collators = collators;
 }