@Override
		default void remove(T object, AddressSet remains, Lifespan span) {
			// TODO: Split query by parts of remains? Probably not worth it.
			for (T found : query(
				new AddressRangeImpl(remains.getMinAddress(), remains.getMaxAddress()), span)) {
				if (found == object) {
					continue;
				}
				removeItem(remains, found, span.lmax());
				if (remains.isEmpty()) {
					return;
				}
			}
		}
A convenience for tracking the time structure of a trace and querying the trace accordingly.
Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/model/TraceTimeViewport.java