Source code for usim._primitives.flag

from .condition import Condition
from .notification import postpone


[docs]class Flag(Condition): """Explicitly settable condition""" __slots__ = ('_value', '_inverse') def __init__(self): super().__init__() self._value = False self._inverse = InverseFlag(self) def __bool__(self) -> bool: return self._value def __invert__(self) -> 'InverseFlag': return self._inverse
[docs] async def set(self, to: bool = True): """Set the boolean value of this condition""" if to and not self: self._value = to self.__trigger__() elif self and not to: self._value = to self._inverse.__trigger__() await postpone()
class InverseFlag(Condition): __slots__ = ('_event',) def __init__(self, flag: Flag): super().__init__() self._event = flag def __bool__(self) -> bool: return not self._event def __invert__(self) -> 'Flag': return self._event async def set(self, to: bool = True): """Set the boolean value of this condition""" await self._event.set(not to)