class SymbolicAddressMap {

	public void addStackUpto(SymbolicAddressMap in, int bound) {
		if(in == null) {
			throw new AssertionError("addStackUpto: caller map is undefined ?");
		}
		if(this.isTop()) return;
		if(in.isTop()) {
			setTop();
			return;
		}
		for(Entry<Location, BoundedSet<SymbolicAddress>> entry : in.mapP.entrySet()) {
			Location loc = entry.getKey();
			if(! loc.isHeapLoc() && loc.stackLoc < bound) {
				mapP.put(loc, in.getStack(loc.stackLoc));
			}
		}		
	}

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

}