class AcyclicCallGraphBuilder {

	public AbstractDependencyGraph<Address> getDependencyGraph(TaskMonitor monitor)
			throws CancelledException {

		AbstractDependencyGraph<Address> graph = new DependencyGraph<>();
		Deque<Address> startPoints = findStartPoints();
		Set<Address> unprocessed = new TreeSet<>(functionSet); // reliable processing order
		monitor.initialize(unprocessed.size());
		while (!unprocessed.isEmpty()) {
			monitor.checkCanceled();
			Address functionEntry = getNextStartFunction(startPoints, unprocessed);
			processForward(graph, unprocessed, functionEntry, monitor);
		}

		return graph;
	}

	public  AcyclicCallGraphBuilder(Program program, boolean killThunks);
	public  AcyclicCallGraphBuilder(Program program, AddressSetView set, boolean killThunks);
	public  AcyclicCallGraphBuilder(Program program, Collection<Function> functions,
			boolean killThunks);

}