protected void ensureKnown(Address min, Address max) {
		if (minAddress == null) {
			return;
		}
		if (minAddress.compareTo(max) > 0 ||
			maxAddress.compareTo(min) < 0) {
			return;
		}
		min = cmax(min, minAddress);
		max = cmin(max, maxAddress);
		if (known.contains(min, max)) {
			//hits++;
			return;
		}
		//misses++;
		AddressRangeIterator rangesBackward = delegate.getAddressRanges(min, false);
		if (rangesBackward.hasNext()) {
			AddressRange prev = rangesBackward.next();
			cache.add(prev);
			addMixed(known, prev.getMinAddress(), min);
		}
		else {
			addMixed(known, minAddress, min);
		}
		AddressRangeIterator rangesForward = delegate.getAddressRanges(min, true);
		while (true) {
			if (!rangesForward.hasNext()) {
				addMixed(known, min, maxAddress);
				break;
			}
			AddressRange next = rangesForward.next();
			cache.add(next);
			if (next.getMaxAddress().compareTo(max) >= 0) {
				addMixed(known, min, next.getMaxAddress());
				break;
			}
		}
	}
For cases where an address set cannot be accessed expediently, this class may wrap it to provide
cached read-only access.
Ghidra/Debug/ProposedUtils/src/main/java/ghidra/program/model/address/CachedAddressSetView.java