public <T> T injectInto(
     T injectedValue, ObjectBooleanToObjectFunction<? super T, ? extends T> function) {
   T result = injectedValue;
   for (BooleanIterator iterator = this.booleanIterator(); iterator.hasNext(); ) {
     result = function.valueOf(injectedValue, iterator.next());
   }
   return result;
 }
 public <T> T injectInto(
     T injectedValue, ObjectBooleanToObjectFunction<? super T, ? extends T> function) {
   T result = injectedValue;
   for (int i = 0; i < this.size; i++) {
     result = function.valueOf(result, this.items.get(i));
   }
   return result;
 }
 public <T> T injectInto(
     T injectedValue, ObjectBooleanToObjectFunction<? super T, ? extends T> function) {
   T result = injectedValue;
   switch (this.state) {
     case 0:
       return result;
     case 1:
       result = function.valueOf(result, false);
       return result;
     case 2:
       result = function.valueOf(result, true);
       return result;
     case 3:
       result = function.valueOf(result, false);
       result = function.valueOf(result, true);
       return result;
     default:
       throw new AssertionError("Invalid state");
   }
 }