public void parse(PdbByteReader reader) throws PdbException {
		subTypeIndex = reader.parseUnsignedShortVal();
		//TODO: create these as intrinsic types and do proper parsing?
		switch (subTypeIndex) {
			// For each case, parse bytes (to move index forward) and throw bytes away.
			//  The number of bytes parsed is based on the size of the integral type
			//  represented by subTypeIndex.
			case 0x8000: // char
				object =
					LittleEndianDataConverter.INSTANCE.getBigInteger(reader.parseBytes(1), 1, true);
				break;
			case 0x8001: // short
				object =
					LittleEndianDataConverter.INSTANCE.getBigInteger(reader.parseBytes(2), 2, true);
				break;
			case 0x8002: // unsigned short
				object = LittleEndianDataConverter.INSTANCE.getBigInteger(reader.parseBytes(2), 2,
					false);
				break;
			case 0x8003: // 32-bit
				object =
					LittleEndianDataConverter.INSTANCE.getBigInteger(reader.parseBytes(4), 4, true);
				break;
			case 0x8004: // unsigned 32-bit
				object = LittleEndianDataConverter.INSTANCE.getBigInteger(reader.parseBytes(4), 4,
					false);
				break;
			case 0x8005: // Real32
				object = ByteBuffer.wrap(reader.parseBytes(4)).getFloat();
				break;
			case 0x8006: // Real64
				object = ByteBuffer.wrap(reader.parseBytes(8)).getDouble();
				break;
			case 0x8007: // Real80
				object = new Real80(reader);
				break;
			case 0x8008: // Real128
				object = new Real128(reader);
				break;
			case 0x8009: // 64-bit
				object =
					LittleEndianDataConverter.INSTANCE.getBigInteger(reader.parseBytes(8), 8, true);
				break;
			case 0x800a: // unsigned 64-bit
				object = LittleEndianDataConverter.INSTANCE.getBigInteger(reader.parseBytes(8), 8,
					false);
				break;
			case 0x800b: // Real48
				object = new Real48(reader);
				break;
			case 0x800c: // Complex32
				object = new Complex32(reader);
				break;
			case 0x800d: // Complex64
				object = new Complex64(reader);
				break;
			case 0x800e: // Complex80
				object = new Complex80(reader);
				break;
			case 0x800f: // Complex128
				object = new Complex128(reader);
				break;

			case 0x8017: // 128-bit
				object = LittleEndianDataConverter.INSTANCE.getBigInteger(reader.parseBytes(16), 16,
					true);
				break;
			case 0x8018: // unsigned 128-bit
				object = LittleEndianDataConverter.INSTANCE.getBigInteger(reader.parseBytes(16), 16,
					false);
				break;
			case 0x8019: // DECIMAL
				object = new Decimal(reader);
				break;
			case 0x801a: // DATE
				object = new Date(reader);
				break;
			case 0x801b: // Real16
				object = new Real16(reader);
				break;

			default:
				if (subTypeIndex >= 0x8000) {
					throw new PdbException(
						String.format("Unknown Numeric subtype: 0x%04x", subTypeIndex));
				}
				object = BigInteger.valueOf(subTypeIndex);
				break;
		}
	}
Parses an integral MSFT Numeric type from the PdbByteReader.
@param reader the {@link PdbByteReader} from which to parse the data.
@throws PdbException Upon not enough data left to parse or unknown subtype.
Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb2/pdbreader/Numeric.java