@Override
	public DataType toDataType() throws DuplicateNameException, IOException {
		StructureDataType struct = new StructureDataType("objc_opt_t", 0);
		if (version <= 12) {
			struct.add(DWORD, "version", "");
			struct.add(DWORD, "selopt_offset", "");
			struct.add(DWORD, "headeropt_offset", "");
			struct.add(DWORD, "clsopt_offset", "");
		}
		else if (version >= 13 && version <= 14) {
			struct.add(DWORD, "version", "");
			struct.add(DWORD, "selopt_offset", "");
			struct.add(DWORD, "headeropt_offset", "");
			struct.add(DWORD, "clsopt_offset", "");
			struct.add(DWORD, "protocolopt_offset", "");
		}
		else if (version == 15) {
			struct.add(DWORD, "version", "");
			struct.add(DWORD, "flags", "");
			struct.add(DWORD, "selopt_offset", "");
			struct.add(DWORD, "headeropt_ro_offset", "");
			struct.add(DWORD, "clsopt_offset", "");
			struct.add(DWORD, "unused_protocolopt_offset", "");
			struct.add(DWORD, "headeropt_rw_offset", "");
			struct.add(DWORD, "protocolopt_offset", "");
		}
		else { // version >= 16
			struct.add(DWORD, "version", "");
			struct.add(DWORD, "flags", "");
			struct.add(DWORD, "selopt_offset", "");
			struct.add(DWORD, "headeropt_ro_offset", "");
			struct.add(DWORD, "unused_clsopt_offset", "");
			struct.add(DWORD, "unused_protocolopt_offset", "");
			struct.add(DWORD, "headeropt_rw_offset", "");
			struct.add(DWORD, "unused_protocolopt2_offset", "");
			struct.add(DWORD, "largeSharedCachesClassOffset", "");
			struct.add(DWORD, "largeSharedCachesProtocolOffset", "");
			struct.add(QWORD, "relativeMethodSelectorBaseAddressOffset", "");

		}
		return struct;
	}
Marks up this structure in memory

@param program The {@link Program}
@param space The {@link AddressSpace}
@param log The log
@param monitor A cancelable task monitor
Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/macho/dyld/LibObjcOptimization.java