You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2010/06/04 01:29:49 UTC
svn commit: r951204 - in /tapestry/tapestry5/trunk/tapestry-func/src:
main/java/org/apache/tapestry5/func/ test/java/org/apache/tapestry5/func/
Author: hlship
Date: Thu Jun 3 23:29:49 2010
New Revision: 951204
URL: http://svn.apache.org/viewvc?rev=951204&view=rev
Log:
Work on other LazyFunctions that would inadventently evalute first() prematurely
Added:
tapestry/tapestry5/trunk/tapestry-func/src/main/java/org/apache/tapestry5/func/LazyFirst.java
- copied, changed from r951199, tapestry/tapestry5/trunk/tapestry-func/src/main/java/org/apache/tapestry5/func/LazyWalk.java
Modified:
tapestry/tapestry5/trunk/tapestry-func/src/main/java/org/apache/tapestry5/func/LazyConcat.java
tapestry/tapestry5/trunk/tapestry-func/src/main/java/org/apache/tapestry5/func/LazyTake.java
tapestry/tapestry5/trunk/tapestry-func/src/main/java/org/apache/tapestry5/func/LazyWalk.java
tapestry/tapestry5/trunk/tapestry-func/src/test/java/org/apache/tapestry5/func/MapperTest.java
Modified: tapestry/tapestry5/trunk/tapestry-func/src/main/java/org/apache/tapestry5/func/LazyConcat.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-func/src/main/java/org/apache/tapestry5/func/LazyConcat.java?rev=951204&r1=951203&r2=951204&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-func/src/main/java/org/apache/tapestry5/func/LazyConcat.java (original)
+++ tapestry/tapestry5/trunk/tapestry-func/src/main/java/org/apache/tapestry5/func/LazyConcat.java Thu Jun 3 23:29:49 2010
@@ -17,25 +17,25 @@ package org.apache.tapestry5.func;
@SuppressWarnings("unchecked")
class LazyConcat<T> implements LazyFunction<T>
{
- private final Flow<T> first, second;
+ private final Flow<T> left, right;
public LazyConcat(Flow<T> first, Flow<? extends T> second)
{
- this.first = first;
- this.second = (Flow<T>) second;
+ this.left = first;
+ this.right = (Flow<T>) second;
}
public LazyContinuation<T> next()
{
- if (first.isEmpty())
+ if (left.isEmpty())
{
- if (second.isEmpty())
+ if (right.isEmpty())
return null;
- return new LazyContinuation<T>(second.first(), new LazyWalk<T>(second.rest()));
+ return new LazyContinuation<T>(new LazyFirst<T>(right), new LazyWalk<T>(right.rest()));
}
- return new LazyContinuation<T>(first.first(), new LazyConcat<T>(first.rest(), second));
+ return new LazyContinuation<T>(new LazyFirst<T>(left), new LazyConcat<T>(left.rest(), right));
}
}
Copied: tapestry/tapestry5/trunk/tapestry-func/src/main/java/org/apache/tapestry5/func/LazyFirst.java (from r951199, tapestry/tapestry5/trunk/tapestry-func/src/main/java/org/apache/tapestry5/func/LazyWalk.java)
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-func/src/main/java/org/apache/tapestry5/func/LazyFirst.java?p2=tapestry/tapestry5/trunk/tapestry-func/src/main/java/org/apache/tapestry5/func/LazyFirst.java&p1=tapestry/tapestry5/trunk/tapestry-func/src/main/java/org/apache/tapestry5/func/LazyWalk.java&r1=951199&r2=951204&rev=951204&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-func/src/main/java/org/apache/tapestry5/func/LazyWalk.java (original)
+++ tapestry/tapestry5/trunk/tapestry-func/src/main/java/org/apache/tapestry5/func/LazyFirst.java Thu Jun 3 23:29:49 2010
@@ -14,23 +14,18 @@
package org.apache.tapestry5.func;
-/**
- * Used by {@link LazyConcat} to walk down the values of the second flow.
- */
-class LazyWalk<T> implements LazyFunction<T>
+class LazyFirst<T> implements LazyValue<T>
{
private final Flow<T> flow;
- public LazyWalk(Flow<T> flow)
+ public LazyFirst(Flow<T> flow)
{
this.flow = flow;
}
- public LazyContinuation<T> next()
+ public T get()
{
- if (flow.isEmpty())
- return null;
-
- return new LazyContinuation<T>(flow.first(), new LazyWalk<T>(flow.rest()));
+ return flow.first();
}
+
}
Modified: tapestry/tapestry5/trunk/tapestry-func/src/main/java/org/apache/tapestry5/func/LazyTake.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-func/src/main/java/org/apache/tapestry5/func/LazyTake.java?rev=951204&r1=951203&r2=951204&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-func/src/main/java/org/apache/tapestry5/func/LazyTake.java (original)
+++ tapestry/tapestry5/trunk/tapestry-func/src/main/java/org/apache/tapestry5/func/LazyTake.java Thu Jun 3 23:29:49 2010
@@ -31,7 +31,7 @@ class LazyTake<T> implements LazyFunctio
if (flow.isEmpty() || length < 1)
return null;
- return new LazyContinuation<T>(flow.first(), new LazyTake<T>(length - 1, flow.rest()));
+ return new LazyContinuation<T>(new LazyFirst<T>(flow), new LazyTake<T>(length - 1, flow.rest()));
}
}
Modified: tapestry/tapestry5/trunk/tapestry-func/src/main/java/org/apache/tapestry5/func/LazyWalk.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-func/src/main/java/org/apache/tapestry5/func/LazyWalk.java?rev=951204&r1=951203&r2=951204&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-func/src/main/java/org/apache/tapestry5/func/LazyWalk.java (original)
+++ tapestry/tapestry5/trunk/tapestry-func/src/main/java/org/apache/tapestry5/func/LazyWalk.java Thu Jun 3 23:29:49 2010
@@ -31,6 +31,6 @@ class LazyWalk<T> implements LazyFunctio
if (flow.isEmpty())
return null;
- return new LazyContinuation<T>(flow.first(), new LazyWalk<T>(flow.rest()));
+ return new LazyContinuation<T>(new LazyFirst<T>(flow), new LazyWalk<T>(flow.rest()));
}
}
Modified: tapestry/tapestry5/trunk/tapestry-func/src/test/java/org/apache/tapestry5/func/MapperTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-func/src/test/java/org/apache/tapestry5/func/MapperTest.java?rev=951204&r1=951203&r2=951204&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-func/src/test/java/org/apache/tapestry5/func/MapperTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-func/src/test/java/org/apache/tapestry5/func/MapperTest.java Thu Jun 3 23:29:49 2010
@@ -125,8 +125,27 @@ public class MapperTest extends BaseFunc
// Because of laziness, its possible to count all the values in some mapped lists, without
// ever actually running the mapper to determine the final value.
-
+
assertEquals(F.range(1, 100).map(doubler).count(), 99);
assertEquals(count.get(), 0);
+
+ // Because values are now lazily evaluated as well as flows, we can count the size of a flow
+ // without ever actually calculating (via the mapper) an output value.
+
+ Flow<Integer> flow = F.range(1, 100).map(doubler).concat(F.range(1, 10).map(doubler));
+ assertEquals(flow.count(), 108);
+ assertEquals(count.get(), 0);
+
+ assertFlowValues(flow.take(2), 2, 4);
+ assertEquals(count.get(), 2);
+
+ count.set(0);
+
+ // Isn't this nifty; take-ing from a flow will create a flow that references parts
+ // of the original flow, and previously computed values (2 and 4) are still accessible!
+
+ assertFlowValues(flow.take(3), 2, 4, 6);
+ assertEquals(count.get(), 1);
+
}
}