@Override
	protected DataTypeComponent[] getAllComponents(MemBuffer buf) {
		Memory memory = buf.getMemory();
		ArrayList<DataTypeComponent> compList = new ArrayList<DataTypeComponent>();

		ReadOnlyDataTypeComponent comp;
		int countSize = 0;
		int ordinal = 0;
		if (header != null) {
			comp =
				new ReadOnlyDataTypeComponent(header, this, header.getLength(), ordinal, 0,
					header.getName() + "_" + buf.getAddress(), "");
			compList.add(ordinal++, comp);
			countSize = comp.getLength();
		}
		int offset = countSize;
		MemoryBufferImpl newBuf = new MemoryBufferImpl(memory, buf.getAddress());
		try {
			newBuf.advance(countSize);
			while (moreComponents(memory, newBuf.getAddress())) {
				DataTypeInstance dti =
					DataTypeInstance.getDataTypeInstance(baseStruct, newBuf, false);
				if (dti == null) {
					Msg.error(this, "ERROR: problem with data at " + newBuf.getAddress());
					return null;
				}
				int len = dti.getLength();
				comp =
					new ReadOnlyDataTypeComponent(dti.getDataType(), this, len, ordinal, offset,
						baseStruct.getName() + "_" + newBuf.getAddress(), "");
				compList.add(ordinal, comp);
				offset += len;
				newBuf.advance(len);
				ordinal++;
			}
		}
		catch (AddressOverflowException e) {
			Msg.error(this, "ERROR: problem with data at " + newBuf.getAddress());
			return null;
		}

		DataTypeComponent[] comps = new DataTypeComponent[compList.size()];
		for (int i = 0; i < compList.size(); i++) {
			comps[i] = compList.get(i);
		}
		return comps;
	}
@see ghidra.program.model.data.DynamicDataType#getAllComponents(ghidra.program.model.mem.MemBuffer)
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/RepeatedDynamicDataType.java