public void add(long start, long end, long value) {
		synchronized (dbHandle) {
			//++modCount;
			try {
				// Consoldate existing ranges for this value which overlap
				Field[] mapKeys = mapTable.findRecords(new LongField(value), MAP_VALUE_COL);
				for (int i = 0; i < mapKeys.length; i++) {

					// Get next range
					Field mapKey = mapKeys[i];
					DBRecord mapRec = mapTable.getRecord(mapKey);
					long rangeKey = mapRec.getLongValue(MAP_RANGE_KEY_COL);
					DBRecord rangeRec = rangeTable.getRecord(rangeKey);

					// Consoldate range if it overlaps
					long min = rangeKey;
					long max = rangeRec.getLongValue(RANGE_TO_COL);
					if (min <= start) {
						if (max >= end) {
							return;
						}
						else if (max >= (start - 1)) {
							mapTable.deleteRecord(mapKey);
							consolidateRange(rangeKey, max);
							start = min;
						}
					}
					else if (min <= (end + 1)) {
						mapTable.deleteRecord(mapKey);
						consolidateRange(rangeKey, max);
						if (max > end) {
							end = max;
						}
					}
				}

				// Handle existing range which overlaps start index.
				DBRecord rangeRec = rangeTable.getRecordBefore(start);
				if (rangeRec != null) {
					//long startRange = rangeRec.getKey();
					long endRange = rangeRec.getLongValue(RANGE_TO_COL);
					if (endRange >= start) {
						rangeRec = splitRange(rangeRec, start - 1);
						if (endRange >= end) {
							if (endRange > end) {
								splitRange(rangeRec, end);
							}
							insertMapEntry(start, value);
							return;
						}
						insertMapEntry(start, value);
						start = endRange + 1;
					}
				}

				// Handle existing overlapping ranges
				RecordIterator iter = rangeTable.iterator(start, end, start);
				while (iter.hasNext()) {
					rangeRec = iter.next();
					long startRange = rangeRec.getKey();
					long endRange = rangeRec.getLongValue(RANGE_TO_COL);
					if (startRange > start) {
						// create missing range
						insertRangeEntry(start, startRange - 1);
						insertMapEntry(start, value);
						start = startRange;
					}
					if (endRange >= end) {
						if (endRange > end) {
							splitRange(rangeRec, end);
						}
						insertMapEntry(start, value);
						return;
					}
					if (startRange != start) {
						rangeRec = splitRange(rangeRec, endRange - 1);
					}
					insertMapEntry(start, value);
					start = endRange + 1;
				}

				// create missing range
				insertRangeEntry(start, end);
				insertMapEntry(start, value);

			}
			catch (IOException e) {
				errHandler.dbError(e);
			}
		}
	}
Add a value to this map over the specified range.
@param start the start of the range.
@param end the end of the range.
@param value the value to associate with the range.
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/util/SharedRangeMapDB.java