public synchronized void setObject(long start, long end, T object) {
		lastRange = null;
		ObjectValueRange<T> newRange = new ObjectValueRange<T>(start, end, object);
	
		// if ranges list is empty, just add the new entry
		if (ranges.isEmpty()) {
			ranges.add(newRange);
			return;
		}
		
		// Look at the stored range before the new range to see if it extends into the new range
		int previousIndex = getPositionOfRangeBefore(newRange);
		if ( previousIndex >= 0 ) {
			newRange = adjustPreviousRangeForOverlap(start, end, object, newRange, previousIndex);
		}

		int insertionIndex = Math.max(0, previousIndex+1);
		long newEnd = newRange.getEnd();
		removeCompletelyOverlappedRanges(insertionIndex, newEnd);
		
		newRange = adjustRemainingRangeForOverlap(object, newRange, insertionIndex, newEnd);

		ranges.add(insertionIndex, newRange);
	}
Associates the given object with all indices in the given range. The object may be null,
but an assocition is still established.  Use the clearRange() method to remove associations.
@param start the start of the range.
@param end the end (inclusive) of the range.
@param object the object to associate with the given range.
Ghidra/Framework/Generic/src/main/java/ghidra/util/datastruct/ObjectRangeMap.java