class SymbolicAddressMap {

	public SymbolicAddressMap cloneFilterStack(int bound) {
		if(this.isTop()) return this;
		SymbolicAddressMap copy = new SymbolicAddressMap(this.bsFactory);
		for(Entry<Location, BoundedSet<SymbolicAddress>> entry : mapP.entrySet()) {
			Location loc = entry.getKey();
			if(loc.isHeapLoc() || loc.stackLoc < bound) {
				copy.put(loc, entry.getValue());
			}
		}
		return copy;
	}

	public  SymbolicAddressMap(BoundedSetFactory<SymbolicAddress> bsFactory);
	private  SymbolicAddressMap(BoundedSetFactory<SymbolicAddress> bsFactory,
							   HashMap<Location,BoundedSet<SymbolicAddress>> initP,
							   HashMap<String,BoundedSet<SymbolicAddress>> initA);

}