private void findOrAllocateMainVbtPtr(MsVxtManager vxtManager) {
		if (propagatedSelfBaseVbts.isEmpty()) { // a pointer might be available in a direct base
			if (!virtualLayoutBaseClasses.isEmpty()) { // there is a need for a main vbtptr
				TreeSet<Long> vbtOffsets = new TreeSet<>();
				for (VirtualLayoutBaseClass base : virtualLayoutBaseClasses) {
					vbtOffsets.add((long) base.getBasePointerOffset());
				}
				if (vbtOffsets.size() > 1) {
					Msg.warn(this, "Unexpected multiple vbts for " + myId);
				}
				Long vbtPtrOffset = vbtOffsets.first();
				if (myVbtPtrOffset != null && vbtPtrOffset != myVbtPtrOffset) {
					Msg.warn(this, "Mismatch vbt location for " + myId);
				}
				VxtPtrInfo info = new VxtPtrInfo(vbtPtrOffset, vbtPtrOffset, myId, List.of(myId));
				VirtualBaseTable myVbt = vxtManager.findVbt(myId, info.parentage(), 0);
				myVbt.setPtrOffsetInClass(info.finalOffset());
				propagatedSelfBaseVbts.add(info);
				finalVbtByOffset.put(info.finalOffset(), myVbt);
				finalVbtPtrInfoByOffset.put(info.accumOffset(), info);
				OwnerParentage op = new OwnerParentage(info.baseId(), info.parentage());
				vbTableIdByOffset.put(info.accumOffset(), op);
				vbtOffsetByTableId.put(op, info.accumOffset());
				myVbtPtrOffset = finalVbtPtrInfoByOffset.firstKey();
				Member newMember = new Member(ClassUtils.VBPTR, ClassUtils.VXPTR_TYPE, false,
					ClassFieldAttributes.UNKNOWN, myVbtPtrOffset.intValue());
				layoutVbtPtrMembers.add(newMember);
				myMembers.add(newMember);
			}
		}
		mainVbtPtrOffset =
			finalVbtPtrInfoByOffset.isEmpty() ? null : finalVbtPtrInfoByOffset.firstKey();
	}
Finds or allocates (if needed) the Virtual Base Table "Pointer" for within the class
structure
Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/CppCompositeType.java