You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by rw...@apache.org on 2003/11/25 22:03:41 UTC

cvs commit: jakarta-commons-sandbox/functor/src/java/org/apache/commons/functor/generator BaseGenerator.java

rwaldhoff    2003/11/25 13:03:41

  Modified:    functor/src/java/org/apache/commons/functor Algorithms.java
               functor/src/java/org/apache/commons/functor/generator
                        BaseGenerator.java
  Log:
  cleanup
  
  Revision  Changes    Path
  1.13      +51 -60    jakarta-commons-sandbox/functor/src/java/org/apache/commons/functor/Algorithms.java
  
  Index: Algorithms.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/functor/src/java/org/apache/commons/functor/Algorithms.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- Algorithms.java	25 Nov 2003 20:47:14 -0000	1.12
  +++ Algorithms.java	25 Nov 2003 21:03:41 -0000	1.13
  @@ -63,8 +63,11 @@
   import java.util.ListIterator;
   import java.util.NoSuchElementException;
   
  +import org.apache.commons.functor.adapter.UnaryFunctionUnaryProcedure;
  +import org.apache.commons.functor.core.NoOp;
   import org.apache.commons.functor.core.collection.FilteredIterator;
   import org.apache.commons.functor.core.collection.TransformedIterator;
  +import org.apache.commons.functor.core.composite.ConditionalUnaryProcedure;
   import org.apache.commons.functor.core.composite.UnaryNot;
   import org.apache.commons.functor.generator.BaseGenerator;
   import org.apache.commons.functor.generator.Generator;
  @@ -163,15 +166,12 @@
       /**
        * Returns a {@link Generator} that will apply the given {@link UnaryFunction} to each
        * generated element.
  +     * @deprecated Use {@link UnaryFunctionUnaryProcedure} and run the generator yourself.
        */
  -    public static final Generator apply(final Generator gen, final UnaryFunction func) {        
  +    public static final Generator apply(final Generator gen, final UnaryFunction func) {
           return new BaseGenerator(gen) {
               public void run(final UnaryProcedure proc) {
  -                gen.run(new UnaryProcedure() {
  -                    public void run(Object obj) {
  -                        proc.run(func.evaluate(obj));
  -                    }
  -                });
  +                gen.run(new UnaryFunctionUnaryProcedure(func));
               }
           };
       }
  @@ -232,7 +232,7 @@
       /**
        * Return the first element within the given {@link Generator} that matches
        * the given {@link UnaryPredicate UnaryPredicate}, or return the given
  -     * (possibly <code>null</code> <code>Object</code> if no matching element
  +     * (possibly <code>null</code>) <code>Object</code> if no matching element
        * can be found.
        *
        * @see #detect(Generator,UnaryPredicate)
  @@ -240,11 +240,7 @@
       public static final Object detect(final Generator gen, final UnaryPredicate pred, Object ifNone) {
           FindWithinGenerator finder = new FindWithinGenerator(gen,pred);
           gen.run(finder);
  -        if(finder.wasFound()) {
  -            return finder.getFoundObject();
  -        } else {
  -            return ifNone;
  -        }
  +        return finder.wasFound() ? finder.getFoundObject() : ifNone;
       }
   
       /**
  @@ -263,10 +259,26 @@
       }
   
       /**
  -     * Equivalent to <code>{@link #inject(Generator,Object,BinaryFunction) inject}(new {@link org.apache.commons.functor.generator.IteratorToGeneratorAdapter IteratorToGeneratorAdapter}(iter),seed,func)</code>.
  +     * {@link BinaryFunction#evaluate Evaluate} the pair <i>( previousResult,
  +     * element )</i> for each element in the given {@link Iterator} where
  +     * previousResult is initially <i>seed</i>, and thereafter the result of the
  +     * evaluation of the previous element in the iterator. Returns the result
  +     * of the final evaluation.
  +     *
  +     * <p>
  +     * In code:
  +     * <pre>
  +     * while(iter.hasNext()) {
  +     *   seed = func.evaluate(seed,iter.next());
  +     * }
  +     * return seed;
  +     * </pre>
        */
       public static final Object inject(Iterator iter, Object seed, BinaryFunction func) {
  -        return inject(new IteratorToGeneratorAdapter(iter), seed, func);
  +        while(iter.hasNext()) {
  +            seed = func.evaluate(seed,iter.next());
  +        }
  +        return seed;
       }
   
       /**
  @@ -286,16 +298,9 @@
        * </pre>
        */
       public static final Object inject(Generator gen, final Object seed, final BinaryFunction func) {
  -        final Object[] result = new Object[1];
  -        result[0] = seed;
  -
  -        gen.run(new UnaryProcedure() {
  -            public void run(Object obj) {
  -                result[0] = func.evaluate(result[0], obj);
  -            }
  -        });
  -
  -        return result[0];
  +        Injector injector = new Injector(seed,func);
  +        gen.run(injector);
  +        return injector.getResult();
       }
   
       /**
  @@ -313,13 +318,7 @@
       public static Generator reject(final Generator gen, final UnaryPredicate pred) {
           return new BaseGenerator(gen) {
               public void run(final UnaryProcedure proc) {
  -                gen.run(new UnaryProcedure() {
  -                    public void run(Object obj) {
  -                        if (!pred.test(obj)) {
  -                            proc.run(obj);
  -                        }
  -                    }
  -                });
  +                gen.run(new ConditionalUnaryProcedure(pred,NoOp.instance(),proc));
               }
           };
       }
  @@ -339,13 +338,7 @@
       public static final Generator select(final Generator gen, final UnaryPredicate pred) {
           return new BaseGenerator(gen) {
               public void run(final UnaryProcedure proc) {
  -                gen.run(new UnaryProcedure() {
  -                    public void run(Object obj) {
  -                        if (pred.test(obj)) {
  -                            proc.run(obj);
  -                        }
  -                    }
  -                });
  +                gen.run(new ConditionalUnaryProcedure(pred,proc,NoOp.instance()));
               }
           };
       }
  @@ -364,26 +357,6 @@
        */
       public static final Generator until(final Generator gen, final UnaryPredicate pred) {
           return reject(gen,pred);
  -        // here's the old version of this code
  -        // reject(gen,pred) doesn't call stop()
  -        // like this version does.
  -        // should reject call stop?  
  -        // is the stop call signficant here?
  -        /*
  -        return new BaseGenerator(gen) {
  -            public void run(final UnaryProcedure proc) {
  -                gen.run(new UnaryProcedure() {
  -                    public void run(Object obj) {
  -                        if (pred.test(obj)) {
  -                            stop();
  -                        } else {
  -                            proc.run(obj);
  -                        }
  -                    }
  -                });
  -            }
  -        };
  -        */
       }
   
       /**
  @@ -444,6 +417,24 @@
           private boolean found = false;
           private Object foundObject = null;
           private Generator generator = null;
  +    }
  +
  +    private static class Injector implements UnaryProcedure {
  +        Injector(Object seed, BinaryFunction function) {
  +            this.seed = seed;
  +            this.function = function;
  +        }
  +        
  +        public void run(Object obj) {
  +            seed = function.evaluate(seed,obj);
  +        }
  +        
  +        Object getResult() {
  +            return seed;
  +        }
  +        
  +        private Object seed = null;
  +        private BinaryFunction function = null;
       }
       
   }
  
  
  
  1.2       +6 -3      jakarta-commons-sandbox/functor/src/java/org/apache/commons/functor/generator/BaseGenerator.java
  
  Index: BaseGenerator.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/functor/src/java/org/apache/commons/functor/generator/BaseGenerator.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- BaseGenerator.java	17 Jul 2003 22:44:45 -0000	1.1
  +++ BaseGenerator.java	25 Nov 2003 21:03:41 -0000	1.2
  @@ -115,7 +115,10 @@
       /** Set to true when the generator is {@link #stop stopped}. */
       private boolean stopped = false;
   
  -    /** See {@link Algorithms#apply}. */
  +    /** 
  +     * See {@link Algorithms#apply}.
  +     * @deprecated Use <code>{@link #foreach foreach}({@link UnaryFunctionUnaryProcedure UnaryFunctionUnaryProcedure}.adapt(func))</code>.
  +     */
       public final Generator apply(UnaryFunction func) {
           return Algorithms.apply(this,func);
       }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org