@Override
	public void moveAddressRange(Address fromAddr, Address toAddr, long length, TaskMonitor monitor)
			throws AddressOverflowException, CancelledException {
		lock.acquire();
		try {
			Address rangeEnd = fromAddr.addNoWrap(length - 1);

			AddressSet addrSet = new AddressSet(fromAddr, rangeEnd);
			ArrayList<NamespaceHolder> list = new ArrayList<NamespaceHolder>();

			AddressRangeIterator rangeIter = namespaceMap.getAddressRanges(fromAddr, rangeEnd);
			while (rangeIter.hasNext() && !addrSet.isEmpty()) {
				monitor.checkCancelled();
				AddressRange range = rangeIter.next();
				Field field = namespaceMap.getValue(range.getMinAddress());
				long namespaceID = field.getLongValue();
				AddressSet intersection = addrSet.intersect(getAddressSet(namespaceID));
				AddressRangeIterator namespaceRangeIter = intersection.getAddressRanges();
				while (namespaceRangeIter.hasNext() && !monitor.isCancelled()) {
					AddressRange namespaceRange = namespaceRangeIter.next();

					Address startAddr = namespaceRange.getMinAddress();
					Address endAddr = namespaceRange.getMaxAddress();

					long offset = startAddr.subtract(fromAddr);
					startAddr = toAddr.add(offset);
					offset = endAddr.subtract(fromAddr);
					endAddr = toAddr.add(offset);

					AddressRange newRange = new AddressRangeImpl(startAddr, endAddr);

					list.add(new NamespaceHolder(namespaceID, newRange));
				}
				addrSet = addrSet.subtract(intersection);
			}

			monitor.checkCancelled();
			namespaceMap.clearRange(fromAddr, rangeEnd);

			for (NamespaceHolder h : list) {
				monitor.checkCancelled();
				namespaceMap.paintRange(h.range.getMinAddress(), h.range.getMaxAddress(),
					new LongField(h.namespaceID));
			}
		}
		finally {
			clearCache();
			lock.release();
		}
	}
Gets the body for the given namespace.
@param namespace the namespace for which to get its body.
@return body for the given namespace
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/NamespaceManager.java