Source code for avl._core.list

# Copyright 2024 Apheleia
#
# Description:
# Apheleia Verification Library List

from typing import Any

from cocotb.triggers import Event


[docs] class List(list):
[docs] def __init__(self, *args: list[Any]) -> None: """ Initializes the List. :param args: Initial elements of the list. :type args: list[Any] """ super().__init__(args) self._push_event = Event() self._pop_event = Event()
[docs] def append(self, data: Any) -> None: """ Appends an element to the list and sets the event. :param data: The element to be appended. :type data: Any """ super().append(data) self._push_event.set()
[docs] def clear(self) -> None: """ Clears the list and clears the event. """ super().clear() self._pop_event.set()
[docs] def extend(self, iterable: list[Any]) -> None: """ Extends the list with elements from an iterable and sets the event. :param iterable: The iterable to extend the list with. :type iterable: list[Any] """ super().extend(iterable) self._push_event.set()
[docs] def insert(self, index: int, data: Any) -> None: """ Inserts an element at a given position in the list and sets the event. :param index: Position at which to insert the element. :type index: int :param data: The element to be inserted. :type data: Any """ super().insert(index, data) self._push_event.set()
[docs] def pop(self, index: int = -1) -> Any: """ Pops an element from the list at a given position. :param index: Position from which to pop the element. Defaults to -1 (last element). :type index: int :returns: The popped element. :rtype: Any """ v = super().pop(index) self._pop_event.set() return v
[docs] def remove(self, data: Any) -> None: """ Removes the first occurrence of an element from the list and sets the event. :param data: The element to be removed. :type data: Any """ super().remove(data) self._pop_event.set()
[docs] async def blocking_pop(self) -> Any: """ Pops an element from the list, blocking if the list is empty. :returns: The popped element. :rtype: Any """ await self._push_event.wait() v = self.pop(0) if len(self) == 0: self._push_event.clear() return v
[docs] async def blocking_get(self) -> Any: """ Gets an element from the list, blocking if the list is empty. :returns: The retrieved element. :rtype: Any """ return await self.blocking_pop()
Queue = List __all__ = ["List"]