Spaces:
Sleeping
Sleeping
| """FIFO queue state for one messaging conversation tree.""" | |
| from collections import deque | |
| class MessageNodeQueue: | |
| """Queue with snapshot/remove helpers, backed by a deque and a set index.""" | |
| def __init__(self, items: list[str] | None = None) -> None: | |
| self._deque: deque[str] = deque() | |
| self._set: set[str] = set() | |
| for item in items or []: | |
| self.put(item) | |
| def put(self, item: str) -> bool: | |
| """Append a unique item and report whether the queue changed.""" | |
| if item in self._set: | |
| return False | |
| self._deque.append(item) | |
| self._set.add(item) | |
| return True | |
| def pop(self) -> str | None: | |
| if not self._deque: | |
| return None | |
| item = self._deque.popleft() | |
| self._set.discard(item) | |
| return item | |
| def qsize(self) -> int: | |
| return len(self._deque) | |
| def items(self) -> tuple[str, ...]: | |
| return tuple(self._deque) | |
| def remove(self, item: str) -> bool: | |
| if item not in self._set: | |
| return False | |
| self._set.discard(item) | |
| self._deque = deque(x for x in self._deque if x != item) | |
| return True | |
| def drain(self) -> tuple[str, ...]: | |
| items = tuple(self._deque) | |
| self._deque.clear() | |
| self._set.clear() | |
| return items | |