private void build(DataTypeManager dtm, CategoryPath categoryPath) {
		if (ptrOffsetInClass == null || maxTableIndexSeen == -1) {
			tableStructure = null;
			isBuilt = true;
			return;
		}
		String name = ClassUtils.getSpecialVxTableName(ptrOffsetInClass);
		DataType defaultEntry = ClassUtils.getVftDefaultEntry(dtm);
		int entrySize = defaultEntry.getLength();
		StructureDataType dt = new StructureDataType(categoryPath, name, 0, dtm);
		int masterOffset = 0;
		for (Map.Entry<Integer, VirtualFunctionTableEntry> mapEntry : entriesByTableIndex
				.entrySet()) {
			int tableIndex = mapEntry.getKey();
			VFTableEntry tableEntry = mapEntry.getValue();
			while (masterOffset < tableIndex) {
				dt.add(defaultEntry, "", "");
				masterOffset += entrySize;
			}
			dt.add(tableEntry.getFunctionPointer(), tableEntry.getOverridePath().toString(), "");
			masterOffset += entrySize;
		}
		dt.align(defaultEntry.getAlignedLength());
		dt.setToDefaultPacking();
		tableStructure = (Structure) dtm.resolve(dt, null);
		//System.out.println(tableStructure.toString());
		isBuilt = true;
	}
Returns the built data type for this vftable for the current entries
@param dtm the data type manager
@param categoryPath category path for the table
@return the structure of the vftable
Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/classtype/VirtualFunctionTable.java