@Override
	public boolean hasNext() {
		lock.acquire();
		try {
			if (expectedModCount != rangeMap.getModCount()) {
				throw new ConcurrentModificationException();
			}
			if (nextRecord != null) {
				return true;
			}
			if (startRange != null) {
				return true;
			}
			if (recordIterator != null) {
				try {
					return recordIterator.hasNext();
				}
				catch (IOException e) {
					rangeMap.dbError(e);
				}
			}
			return false;
		}
		finally {
			lock.release();
		}
	}
Constructs an AddressRangeIterator over all ranges between the given start address and the
given end address that have a defined value. If start is in the middle of a defined range,
the first range returned will truncated to start with the given start address. 
If the endAddress is in the middle of a defined range, the last range will be truncated to
end with the given end address
@param rangeMap the AddressRangeMapDB to iterate over
@param start the address where the iterator should start
@param end the address where the iterator should end
@throws IOException if a database I/O exception occurs
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/util/AddressRangeMapIterator.java