CXCV/Python/Managers/EventsManager.py

46 lines
1.1 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from typing import Self, Callable, Any
class EventsManager:
def __init__(self:Self) -> None:
self.__events:list[Callable[[Any|None], Any|None]] = []
def execute(self:Self, *arguments:tuple[Any|None, ...]) -> tuple[Any|None]:
results:tuple[Any|None] = ()
for event in self.__events:
if event is not None:
results += (event(*arguments),)
return results
def add(self:Self,
event:Callable[[Any|None], Any|None]
) -> int|None:
i:int|None = None
if callable(event):
l:int = len(self.__events)
i = 0
while i < l and self.__events[i] is not None:
i += 1
if i < l:
self.__events[i] = event
else:
self.__events.append(event)
return i
def remove(self:Self, i:int) -> bool:
if 0 <= i < len(self.__events) and self.__events[i] is not None:
self.__events[i] = None
return True
return False