public List<Function> getVfunctions(Address vftableAddress) throws CancelledException {

		Set<Function> vfunctionSet = new HashSet<Function>();
		Data vftableData = program.getListing().getDefinedDataAt(vftableAddress);

		// now make sure the array or the structure is all pointers
		if (!extendedFlatAPI.isArrayOrStructureOfAllPointers(vftableData)) {
			return null;
		}

		int numPointers = vftableData.getNumComponents();

		for (int i = 0; i < numPointers; ++i) {
			monitor.checkCancelled();

			Address functionPointerAddress = vftableData.getComponent(i).getAddress();

			// skip the null pointers if there are any
			if (functionPointerAddress == null) {
				continue;
			}

			Function function = extendedFlatAPI.getReferencedFunction(functionPointerAddress);

			if (function != null) {
				vfunctionSet.add(function);
			}

		}
		List<Function> virtualFunctionList = new ArrayList<Function>(vfunctionSet);
		return virtualFunctionList;

	}
Get the virtual functions from the vftable at the given address
@param vftableAddress the given vftable address
@return list of functions pointed to from the given vftable
@throws CancelledException if cancelled
Ghidra/Features/Decompiler/ghidra_scripts/classrecovery/RecoveredClassHelper.java