Author: hlship
Date: Mon May 31 17:34:51 2010
New Revision: 949813
URL: http://svn.apache.org/viewvc?rev=949813&view=rev
Log:
Implement a number of methods of AbstractFlow in terms of creating an ArrayFlow
and delegating to it
Modified:
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/func/AbstractFlow.java
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/func/ArrayFlow.java
Modified:
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/func/AbstractFlow.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/func/AbstractFlow.java?rev=949813&r1=949812&r2=949813&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/func/AbstractFlow.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/func/AbstractFlow.java
Mon May 31 17:34:51 2010
@@ -30,25 +30,25 @@ import org.apache.tapestry5.ioc.internal
*/
abstract class AbstractFlow<T> implements Flow<T>
{
- private <X> X nyi()
- {
- throw new RuntimeException("Not yet implemented.");
- }
-
/**
* Method limited to just AbstractFlow and its subclasses. Forces a
resolve of the entire Flow,
* and results in a mutable list of the values in the flow.
*/
- List<T> toMutableList()
+ protected List<T> toMutableList()
{
- ArrayList<T> result = new ArrayList<T>();
+ return toMutableList(this);
+ }
- Flow<T> cursor = this;
+ protected static <T> List<T> toMutableList(Flow<T> flow)
+ {
+ List<T> result = new ArrayList<T>();
- while (!cursor.isEmpty())
+ Flow<T> current = flow;
+
+ while (!current.isEmpty())
{
- result.add(cursor.first());
- cursor = cursor.rest();
+ result.add(current.first());
+ current = current.rest();
}
return result;
@@ -152,17 +152,17 @@ abstract class AbstractFlow<T> implement
public Flow<T> reverse()
{
- return nyi();
+ return new ArrayFlow<T>(this).reverse();
}
public Flow<T> sort()
{
- return nyi();
+ return new ArrayFlow<T>(this).sort();
}
public Flow<T> sort(Comparator<? super T> comparator)
{
- return nyi();
+ return new ArrayFlow<T>(this).sort(comparator);
}
public List<T> toList()
Modified:
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/func/ArrayFlow.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/func/ArrayFlow.java?rev=949813&r1=949812&r2=949813&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/func/ArrayFlow.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/func/ArrayFlow.java
Mon May 31 17:34:51 2010
@@ -39,6 +39,12 @@ class ArrayFlow<T> extends AbstractFlow<
// Guarded by this
private Flow<T> rest;
+ /** Creates an ArrayFlow from the values in the other flow. */
+ ArrayFlow(Flow<T> flow)
+ {
+ this(toMutableList(flow));
+ }
+
@SuppressWarnings("unchecked")
ArrayFlow(Collection<T> values)
{
@@ -55,8 +61,6 @@ class ArrayFlow<T> extends AbstractFlow<
this.values = values;
this.start = start;
this.count = count;
-
- assert count > 0;
}
public Flow<T> each(Worker<? super T> worker)
@@ -105,7 +109,7 @@ class ArrayFlow<T> extends AbstractFlow<
return false;
}
- List<T> toMutableList()
+ protected List<T> toMutableList()
{
List<T> result = new ArrayList<T>(count);
@@ -146,8 +150,6 @@ class ArrayFlow<T> extends AbstractFlow<
public Iterator<T> iterator()
{
- // Kind of inefficient but it works.
-
return toList().iterator();
}
@@ -171,5 +173,4 @@ class ArrayFlow<T> extends AbstractFlow<
return new ArrayFlow<T>(values, start + 1, count - 1);
}
-
}