@Override
	public AddressRangeIterator getAddressRanges(Address start, boolean forward) {
		if (!start.getAddressSpace().equals(fullSpace.getMinAddress().getAddressSpace())) {
			return new EmptyAddressRangeIterator();
		}
		AddressRange within = forward ? new AddressRangeImpl(start, fullSpace.getMaxAddress())
				: new AddressRangeImpl(fullSpace.getMinAddress(), start);
		Iterator<Entry<TraceAddressSnapRange, T>> mapIt = map
				.reduce(TraceAddressSnapRangeQuery.intersecting(within, Lifespan.ALL)
						.starting(forward
								? Rectangle2DDirection.LEFTMOST
								: Rectangle2DDirection.RIGHTMOST))
				.orderedEntries()
				.iterator();
		Iterator<Entry<TraceAddressSnapRange, T>> fltIt =
			IteratorUtils.filteredIterator(mapIt, e -> predicate.test(e.getValue()));
		Iterator<AddressRange> rawIt =
			IteratorUtils.transformedIterator(fltIt, e -> e.getKey().getRange());
		return new UnionAddressRangeIterator(rawIt, forward);
	}
{@inheritDoc}

<p>
Note the first range may be incomplete up when composed of connected entries, but it will at
least include all the ranges ahead of the given start -- or behind the given start if forward
is false. TODO: Fix that, just like {@link UnionAddressSetView}?
Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/map/DBTraceAddressSnapRangePropertyMapAddressSetView.java