private TableData<T> pickExistingTableData() {

		if (disableSubFiltering) {
			return model.getAllTableData();
		}

		TableData<T> startSourceData = getReusableFilteredData(); // this may be filtered
		if (startSourceData == null) {
			// must use all data due to a new filter
			startSourceData = model.getAllTableData();
		}
		TableData<T> copy = startSourceData.copy();
		return copy;
	}
Picks the table data to use for all future states (e.g., filtering, sorting, etc).  Data can
be reused if its filter is a superset of the pending filter.  Likewise, if the pending
filter is itself a superset of the current filter, then this code will walk backwards,
starting at the current table data, until it finds either the root dataset or a child of the
root whose filter is a superset of the pending filter.
<p>
Reusing table data in this way has the potential to consume too much memory (in the case
where the initial dataset is large and each subsequent filter is a subset of the previous
filter, where each filter does't significantly reduce the newly filtered dataset.
<p>
Since much memory could be consumed, we provide an option in the tool to disable this reuse
of filtered data.  When not in use, each filter change will perform a full refilter.  This
is not an issue for tables with moderate to small-sized datasets.

@return the initial data to use for future filter and sort operations.
Ghidra/Framework/Docking/src/main/java/docking/widgets/table/threaded/TableUpdateJob.java