changeset 5488:21cab9000931

.filter() on Graph.getNode now tries to use the fast node iterator if possible
author Gilles Duboscq <duboscq@ssw.jku.at>
date Wed, 06 Jun 2012 18:55:39 +0200
parents 9743ae819f73
children 5d0d72b37f88
files graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Graph.java graal/com.oracle.graal.graph/src/com/oracle/graal/graph/iterators/NodeIterable.java
diffstat 2 files changed, 12 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Graph.java	Tue Jun 05 17:38:48 2012 +0200
+++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Graph.java	Wed Jun 06 18:55:39 2012 +0200
@@ -313,6 +313,15 @@
             public Iterator<Node> iterator() {
                 return new NodeIterator();
             }
+
+            @SuppressWarnings("unchecked")
+            @Override
+            public <F extends Node> NodeIterable<F> filter(Class<F> clazz) {
+                if (IterableNodeType.class.isAssignableFrom(clazz)) {
+                    return getNodes((Class) clazz);
+                }
+                return super.filter(clazz);
+            }
         };
     }
 
--- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/iterators/NodeIterable.java	Tue Jun 05 17:38:48 2012 +0200
+++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/iterators/NodeIterable.java	Wed Jun 06 18:55:39 2012 +0200
@@ -34,10 +34,10 @@
         return new FilteredNodeIterable<>(this).until(clazz);
     }
     @SuppressWarnings("unchecked")
-    public <F extends T> FilteredNodeIterable<F> filter(Class<F> clazz) {
-        return (FilteredNodeIterable<F>) new FilteredNodeIterable<>(this).and(NodePredicates.isA(clazz));
+    public <F extends T> NodeIterable<F> filter(Class<F> clazz) {
+        return (NodeIterable<F>) new FilteredNodeIterable<>(this).and(NodePredicates.isA(clazz));
     }
-    public FilteredNodeIterable<T> filterInterface(Class<?> iface) {
+    public NodeIterable<T> filterInterface(Class<?> iface) {
         return new FilteredNodeIterable<>(this).and(NodePredicates.isAInterface(iface));
     }
     public FilteredNodeIterable<T> filter(NodePredicate predicate) {