public static <R> List<R> decompileFunctions(QCallback<Function, R> callback, Program program,
			AddressSetView addresses, TaskMonitor monitor) throws InterruptedException, Exception {

		int functionCount = program.getFunctionManager().getFunctionCount();
		Listing listing = program.getListing();
		FunctionIterator iterator = listing.getFunctions(addresses, true);

		List<R> results = doDecompileFunctions(callback, iterator, functionCount, monitor);
		return results;
	}
Decompile the given functions using multiple decompilers

@param callback the callback to be called for each item that is processed
@param program the program
@param addresses the addresses restricting which functions to decompile
@param monitor the task monitor
@return the list of client results
@throws InterruptedException if interrupted
@throws Exception if any other exception occurs
Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/parallel/ParallelDecompiler.java