public void moveAddressRange(Address fromAddr, Address toAddr, long length, TaskMonitor monitor)
			throws CancelledException {
		if (length <= 0) {
			return;
		}
		AddressRangeObjectMap<T> tmpMap = new AddressRangeObjectMap<T>();

		Address fromEndAddr = fromAddr.add(length - 1);
		for (AddressRange range : getAddressRangeIterator(fromAddr, fromEndAddr)) {
			monitor.checkCancelled();

			Address minAddr = range.getMinAddress();
			T value = getObject(minAddr);
			long offset = minAddr.subtract(fromAddr);
			minAddr = toAddr.add(offset);

			Address maxAddr = range.getMaxAddress();
			offset = maxAddr.subtract(fromAddr);
			maxAddr = toAddr.add(offset);

			tmpMap.setObject(minAddr, maxAddr, value);
		}
		clearRange(fromAddr, fromEndAddr);
		for (AddressRange range : tmpMap.getAddressRangeIterator()) {
			monitor.checkCancelled();
			T value = tmpMap.getObject(range.getMinAddress());
			setObject(range.getMinAddress(), range.getMaxAddress(), value);
		}
	}
Move all values within an address range to a new range.
@param fromAddr the first address of the range to be moved.
@param toAddr the address where to the range is to be moved.
@param length the number of addresses to move.
@param monitor the task monitor.
@throws CancelledException if the user canceled the operation via the task monitor.
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/register/AddressRangeObjectMap.java