1 19 20 package edu.umd.cs.findbugs.ba.vna; 21 22 import java.util.ArrayList ; 23 import java.util.Collections ; 24 25 33 public class ValueNumberFactory { 34 37 private ArrayList <ValueNumber> allocatedValueList = new ArrayList <ValueNumber>(); 38 39 42 public ValueNumber createFreshValue() { 43 ValueNumber result = new ValueNumber(getNumValuesAllocated()); 44 allocatedValueList.add(result); 45 return result; 46 } 47 48 51 public ValueNumber forNumber(int number) { 52 if (number >= getNumValuesAllocated()) 53 throw new IllegalArgumentException ("Value " + number + " has not been allocated"); 54 return allocatedValueList.get(number); 55 } 56 57 60 public int getNumValuesAllocated() { 61 return allocatedValueList.size(); 62 } 63 64 70 public void compact(int[] map, int numValuesAllocated) { 71 ArrayList <ValueNumber> oldList = this.allocatedValueList; 72 ArrayList <ValueNumber> newList = new ArrayList <ValueNumber>(Collections.nCopies(numValuesAllocated, (ValueNumber)null)); 73 74 for (ValueNumber value : oldList) { 75 int newNumber = map[value.getNumber()]; 76 if (newNumber >= 0) { 77 value.number = newNumber; 80 newList.set(newNumber, value); 81 } 82 } 83 84 this.allocatedValueList = newList; 85 } 86 87 } 88 89 | Popular Tags |