1 19 20 package soot.util; 21 import java.util.*; 22 23 29 30 public final class LargeNumberedMap { 31 public LargeNumberedMap( ArrayNumberer universe ) { 32 this.universe = universe; 33 int newsize = universe.size(); 34 if( newsize < 8 ) newsize = 8; 35 values = new Object [newsize]; 36 } 37 public boolean put( Numberable key, Object value ) { 38 int number = key.getNumber(); 39 if( number == 0 ) throw new RuntimeException ( "oops, forgot to initialize" ); 40 if( number >= values.length ) { 41 Object [] oldValues = values; 42 values = new Object [ universe.size()*2+5 ]; 43 System.arraycopy(oldValues,0,values,0,oldValues.length); 44 } 45 boolean ret = ( values[number] != value ); 46 values[number] = value; 47 return ret; 48 } 49 public Object get( Numberable key ) { 50 int i = key.getNumber(); 51 if( i >= values.length ) return null; 52 return values[ i ]; 53 } 54 55 56 57 private Object [] values; 58 private long[] bits; 59 private int size = 0; 60 private ArrayNumberer universe; 61 } 62 | Popular Tags |