(self, order_jobs=False, allow_merging=False, allow_widening=False, status_callback=None,
                 graph_visitor: "Optional[GraphVisitor[NodeType]]" = None
                 )
Constructor

        :param bool order_jobs:     If all jobs should be ordered or not.
        :param bool allow_merging:  If job merging is allowed.
        :param bool allow_widening: If job widening is allowed.
        :param graph_visitor:       A graph visitor to provide successors.
        :type graph_visitor:        GraphVisitor or None
        :return: None
Constructor
Constructor
def __init__(self, order_jobs=False, allow_merging=False, allow_widening=False, status_callback=None,
                 graph_visitor: "Optional[GraphVisitor[NodeType]]" = None
                 ):
        """
        Constructor

        :param bool order_jobs:     If all jobs should be ordered or not.
        :param bool allow_merging:  If job merging is allowed.
        :param bool allow_widening: If job widening is allowed.
        :param graph_visitor:       A graph visitor to provide successors.
        :type graph_visitor:        GraphVisitor or None
        :return: None
        """

        self._order_jobs = order_jobs
        self._allow_merging = allow_merging
        self._allow_widening = allow_widening
        self._status_callback = status_callback
        self._graph_visitor = graph_visitor

        # sanity checks
        if self._allow_widening and not self._allow_merging:
            raise AngrForwardAnalysisError('Merging must be allowed if widening is allowed.')

        # Analysis progress control
        self._should_abort = False

        # All remaining jobs
        self._job_info_queue: List[JobType] = []

        # A map between job key to job. Jobs with the same key will be merged by calling _merge_jobs()
        self._job_map: Dict[JobKey, JobType] = {}

        # A mapping between node and its input states
        self._input_states: Dict[NodeKey, List[AnalysisState]] = defaultdict(list)
        # A mapping between node and its output state
        self._output_state: Dict[NodeKey, AnalysisState] = {}

        # The graph!
        # Analysis results (nodes) are stored here
        self._graph = networkx.DiGraph()
def __init__ ( self , order_jobs = False , allow_merging = False , allow_widening = False , status_callback = None , graph_visitor : "Optional[GraphVisitor[NodeType]]" = None ) : self . _order_jobs = order_jobs self . _allow_merging = allow_merging self . _allow_widening = allow_widening self . _status_callback = status_callback self . _graph_visitor = graph_visitor # sanity checks if self . _allow_widening and not self . _allow_merging : raise AngrForwardAnalysisError ( 'Merging must be allowed if widening is allowed.' ) # Analysis progress control self . _should_abort = False # All remaining jobs self . _job_info_queue : List [ JobType ] = [ ] # A map between job key to job. Jobs with the same key will be merged by calling _merge_jobs() self . _job_map : Dict [ JobKey , JobType ] = { } # A mapping between node and its input states self . _input_states : Dict [ NodeKey , List [ AnalysisState ] ] = defaultdict ( list ) # A mapping between node and its output state self . _output_state : Dict [ NodeKey , AnalysisState ] = { } # The graph! # Analysis results (nodes) are stored here self . _graph = networkx . DiGraph ( )