| 155 | _eligibility_callbacks = {} |
| 156 | |
| 157 | def __init__(self, configuration: str = "", handle: Optional[core.BNActivityHandle] = None, action: Optional[Callable[[Any], None]] = None, eligibility: Optional[Callable[[Any], bool]] = None): |
| 158 | if handle is None: |
| 159 | action_callback = ctypes.CFUNCTYPE(None, ctypes.c_void_p, ctypes.POINTER(core.BNAnalysisContext))(lambda ctxt, ac: self._action(ac)) |
| 160 | if eligibility: |
| 161 | eligibility_callback = ctypes.CFUNCTYPE(ctypes.c_bool, ctypes.c_void_p, ctypes.POINTER(core.BNActivity), ctypes.POINTER(core.BNAnalysisContext))(lambda ctxt, act, ac: eligibility(act, ac)) |
| 162 | _handle = core.BNCreateActivityWithEligibility(configuration, None, action_callback, eligibility_callback) |
| 163 | self.__class__._eligibility_callbacks[len(self.__class__._eligibility_callbacks)] = eligibility_callback |
| 164 | else: |
| 165 | _handle = core.BNCreateActivity(configuration, None, action_callback) |
| 166 | self.action = action |
| 167 | self.__class__._action_callbacks[len(self.__class__._action_callbacks)] = action_callback |
| 168 | else: |
| 169 | _handle = handle |
| 170 | assert _handle is not None, "Activity instantiation failed" |
| 171 | self.handle = _handle |
| 172 | |
| 173 | def _action(self, ac: Any): |
| 174 | try: |