public void add(Address start, Address end) {
		AddressRange.checkValidRange(start, end);

		if (lastNode != null && !lastNode.isDisposed()) {
			Address value = lastNode.getValue();
			if (contains(lastNode, start) || value.isSuccessor(start)) {
				if (end.compareTo(value) > 0) {
					updateRangeEndAddress(lastNode, end);
					consumeFollowOnNodes(lastNode);
				}
				return;
			}
		}

		if (rbTree.isEmpty()) {
			lastNode = createRangeNode(start, end);
			return;
		}

		if (start.compareTo(rbTree.getLast().getKey()) > 0) {
			RedBlackEntry<Address, Address> last = rbTree.getLast();
			Address value = last.getValue();
			if (contains(last, start) || value.isSuccessor(start)) {
				if (end.compareTo(value) > 0) {
					updateRangeEndAddress(last, end);
				}
			}
			else {
				lastNode = createRangeNode(start, end);
			}
			return;
		}

		lastNode = rbTree.getEntryLessThanEqual(start);
		if (lastNode == null) {
			lastNode = createRangeNode(start, end);
			consumeFollowOnNodes(lastNode);
			return;
		}

		Address nodeEnd = lastNode.getValue();
		if (nodeEnd.compareTo(start) >= 0 || nodeEnd.isSuccessor(start)) {
			if (end.compareTo(nodeEnd) > 0) {
				updateRangeEndAddress(lastNode, end);
				consumeFollowOnNodes(lastNode);
			}
			return;
		}

		lastNode = createRangeNode(start, end);
		consumeFollowOnNodes(lastNode);

	}
Adds the range to this set
@param start the start address of the range to add
@param end the end address of the range to add
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/AddressSet.java