changeset 5418:8dc11fe22eb1

autoGrow option to NodeBitMaps
author Gilles Duboscq <duboscq@ssw.jku.at>
date Mon, 21 May 2012 15:44:03 +0200
parents 791eb4f85b29
children 3c16d338888e
files graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeBitMap.java
diffstat 1 files changed, 17 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeBitMap.java	Fri May 18 15:49:46 2012 +0200
+++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeBitMap.java	Mon May 21 15:44:03 2012 +0200
@@ -22,18 +22,22 @@
  */
 package com.oracle.graal.graph;
 
-import java.util.Collection;
-import java.util.Iterator;
+import java.util.*;
 
 
 
 public final class NodeBitMap implements Iterable<Node>{
-
+    private final boolean autoGrow;
     private final BitMap bitMap;
     private final Graph graph;
 
     public NodeBitMap(Graph graph) {
+        this(graph, false);
+    }
+
+    public NodeBitMap(Graph graph, boolean autoGrow) {
         this.graph = graph;
+        this.autoGrow = autoGrow;
         bitMap = new BitMap(graph.nodeIdCount());
     }
 
@@ -63,6 +67,9 @@
     }
 
     public boolean isMarked(Node node) {
+        if (autoGrow && isNew(node)) {
+            return false;
+        }
         assert check(node);
         return bitMap.get(node.id());
     }
@@ -72,11 +79,17 @@
     }
 
     public void mark(Node node) {
+        if (autoGrow && isNew(node)) {
+            grow();
+        }
         assert check(node);
         bitMap.set(node.id());
     }
 
     public void clear(Node node) {
+        if (autoGrow && isNew(node)) {
+            return;
+        }
         assert check(node);
         bitMap.clear(node.id());
     }
@@ -105,7 +118,7 @@
         return bitMap.toBinaryString();
     }
 
-    public <T extends Node> void markAll(Collection<T> nodes) {
+    public <T extends Node> void markAll(Iterable<T> nodes) {
         for (Node node : nodes) {
             mark(node);
         }