'Obtain all functions of which we have finished analyzing. As _jobs_to_analyze_per_function is a defaultdict(),
if a function address shows up in it with an empty job list, we consider we have exhausted all jobs of this
function (both current jobs and pending jobs), thus the analysis of this function is done.
:return: a list of function addresses of that we have finished analysis.
:rtype:  list'

def _get_finished_functions(self):

    finished_func_addrs = []
    for (func_addr, all_jobs) in self._jobs_to_analyze_per_function.iteritems():
        if (not all_jobs):
            finished_func_addrs.append(func_addr)
    return finished_func_addrs
