(self, job: JobType)
Insert a new job into the job queue. If the job queue is ordered, this job will be inserted at the correct
        position.

        :param job: The job to insert
        :return:    None
Insert a new job into the job queue. If the job queue is ordered, this job will be inserted at the correct
        position.
Insert a new job into the job queue . If the job queue is ordered this job will be inserted at the correct position .
def _insert_job(self, job: JobType) -> None:
        """
        Insert a new job into the job queue. If the job queue is ordered, this job will be inserted at the correct
        position.

        :param job: The job to insert
        :return:    None
        """

        key = self._job_key(job)

        if self._allow_merging:
            if key in self._job_map:
                job_info = self._job_map[key]

                # decide if we want to trigger a widening
                # if not, we'll simply do the merge
                # TODO: save all previous jobs for the sake of widening
                job_added = False
                if self._allow_widening and self._should_widen_jobs(job_info.job, job):
                    try:
                        widened_job = self._widen_jobs(job_info.job, job)
                        # remove the old job since now we have a widened one
                        if job_info in self._job_info_queue:
                            self._job_info_queue.remove(job_info)
                        job_info.add_job(widened_job, widened=True)
                        job_added = True
                    except AngrJobWideningFailureNotice:
                        # widening failed
                        # fall back to merging...
                        pass

                if not job_added:
                    try:
                        merged_job = self._merge_jobs(job_info.job, job)
                        # remove the old job since now we have a merged one
                        if job_info in self._job_info_queue:
                            self._job_info_queue.remove(job_info)
                        job_info.add_job(merged_job, merged=True)
                    except AngrJobMergingFailureNotice:
                        # merging failed
                        job_info = JobInfo(key, job)
                        # update the job map
                        self._job_map[key] = job_info

            else:
                job_info = JobInfo(key, job)
                self._job_map[key] = job_info

        else:
            job_info = JobInfo(key, job)
            self._job_map[key] = job_info

        if self._order_jobs:
            binary_insert(self._job_info_queue, job_info, lambda elem: self._job_sorting_key(elem.job))

        else:
            self._job_info_queue.append(job_info)
def _insert_job ( self , job : JobType ) -> None : key = self . _job_key ( job ) if self . _allow_merging : if key in self . _job_map : job_info = self . _job_map [ key ] # decide if we want to trigger a widening # if not, we'll simply do the merge # TODO: save all previous jobs for the sake of widening job_added = False if self . _allow_widening and self . _should_widen_jobs ( job_info . job , job ) : try : widened_job = self . _widen_jobs ( job_info . job , job ) # remove the old job since now we have a widened one if job_info in self . _job_info_queue : self . _job_info_queue . remove ( job_info ) job_info . add_job ( widened_job , widened = True ) job_added = True except AngrJobWideningFailureNotice : # widening failed # fall back to merging... pass if not job_added : try : merged_job = self . _merge_jobs ( job_info . job , job ) # remove the old job since now we have a merged one if job_info in self . _job_info_queue : self . _job_info_queue . remove ( job_info ) job_info . add_job ( merged_job , merged = True ) except AngrJobMergingFailureNotice : # merging failed job_info = JobInfo ( key , job ) # update the job map self . _job_map [ key ] = job_info else : job_info = JobInfo ( key , job ) self . _job_map [ key ] = job_info else : job_info = JobInfo ( key , job ) self . _job_map [ key ] = job_info if self . _order_jobs : binary_insert ( self . _job_info_queue , job_info , lambda elem : self . _job_sorting_key ( elem . job ) ) else : self . _job_info_queue . append ( job_info )