@Override
	public List<DataTypeComponent> getComponentsContaining(int offset) {
		ArrayList<DataTypeComponent> list = new ArrayList<>();
		if (offset > structLength || offset < 0) {
			return list;
		}
		int index = Collections.binarySearch(components, Integer.valueOf(offset),
			OffsetComparator.INSTANCE);

		boolean hasSizedComponent = false;
		if (index >= 0) {
			// collect matching defined components containing offset
			DataTypeComponentImpl dtc = components.get(index);
			index = backupToFirstComponentContainingOffset(index, offset);
			while (index < components.size()) {
				dtc = components.get(index);
				if (!dtc.containsOffset(offset)) {
					break;
				}
				++index;
				hasSizedComponent |= (dtc.getLength() != 0);
				list.add(dtc);
			}
			// transform index for use with generateUndefinedComponent if invoked
			index = -index - 1;
		}

		if (!hasSizedComponent && offset != structLength && !isPackingEnabled()) {
			// generate undefined componentfor padding offset within non-packed structure
			// if offset only occupied by zero-length component
			list.add(generateUndefinedComponent(offset, index));
		}
		return list;
	}
Construct a new structure with the given name and length

@param path the category path indicating where this data type is located.
@param name the name of the new structure
@param length the initial size of the structure in bytes. If 0 is specified the structure
           will report its length as 1 and {@link #isNotYetDefined()} will return true.
@param universalID the id for the data type
@param sourceArchive the source archive for this data type
@param lastChangeTime the last time this data type was changed
@param lastChangeTimeInSourceArchive the last time this data type was changed in its source
           archive.
@param dtm the data type manager associated with this data type. This can be null. Also, the
           data type manager may not yet contain this actual data type.
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java