private boolean isUnionPart(Union full, Union part, Set<Long> visitedDataTypes) {
		if (full.getLength() < part.getLength()) {
			return false;
		}

		Map<String, DataTypeComponent> fullComponentsByName = new HashMap<>();
		for (DataTypeComponent dtc : full.getComponents()) {
			String name = dtc.getFieldName();
			if (name == null) {
				name = dtc.getDefaultFieldName();
			}
			fullComponentsByName.put(name, dtc);
		}
		for (DataTypeComponent dtc : part.getComponents()) {
			String name = dtc.getFieldName();
			if (name == null) {
				name = dtc.getDefaultFieldName();
			}
			DataTypeComponent fullDTC = fullComponentsByName.get(name);
			if (fullDTC == null) {
				return false;
			}
			DataType partDT = dtc.getDataType();
			DataType fullDT = fullDTC.getDataType();
			if (doRelaxedCompare(partDT, fullDT, visitedDataTypes) == RENAME_AND_ADD) {
				return false;
			}
		}
		return true;
	}
Returns true if one union is a subset of another union.
<p>
Each component of the candidate partial union must be present in the 'full'
union and must be 'equiv'.
<p>
Order of components is ignored, except for unnamed components, which receive
a default name created using their ordinal position.

@param full             {@link Union} datatype that is expected to be a
                        superset of the next param.
@param part             {@link Union} datatype that is expected to be a
                        subset of the previous param.
@param visitedDataTypes identity map of datatypes to prevent loops.
@return true if part is a subset (or equal) to full.
Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/dwarf/DWARFDataTypeConflictHandler.java