AlgoDatSoSe25/utils/literal.py
2025-04-01 12:38:52 +02:00

100 lines
3.1 KiB
Python

class Literal:
def __init__(self, value):
"""Initialisiert Literal."""
if isinstance(value, Literal):
self.value = value.value
else:
self.value = value
self.read_count = 0
self.compare_count = 0
def reset_counters(self):
"""Setzt alle Zähler auf 0 zurück."""
self.read_count = 0
self.compare_count = 0
def get(self):
"""Liest den Wert aus."""
self.read_count += 1
return self.value
def __eq__(self, other):
"""Vergleicht den Wert mit einem anderen Wert."""
assert isinstance(other, Literal), "Can only compare with Literal or MemoryCell"
self.compare_count += 1
self.read_count += 1
other.read_count += 1
return self.value == other.value
def __ne__(self, other):
"""Vergleicht den Wert der Speicherzelle mit einem anderen Wert."""
assert isinstance(other, Literal), "Can only compare with Literal or MemoryCell"
self.compare_count += 1
self.read_count += 1
other.read_count += 1
return self.value != other.value
def __lt__(self, other):
"""Vergleicht den Wert der Speicherzelle mit einem anderen Wert."""
assert isinstance(other, Literal), "Can only compare with Literal or MemoryCell"
self.compare_count += 1
self.read_count += 1
other.read_count += 1
return self.value < other.value
def __le__(self, other):
"""Vergleicht den Wert der Speicherzelle mit einem anderen Wert."""
assert isinstance(other, Literal), "Can only compare with Literal or MemoryCell"
self.compare_count += 1
self.read_count += 1
other.read_count += 1
return self.value <= other.value
def __gt__(self, other):
"""Vergleicht den Wert der Speicherzelle mit einem anderen Wert."""
assert isinstance(other, Literal), "Can only compare with Literal or MemoryCell"
self.compare_count += 1
self.read_count += 1
other.read_count += 1
return self.value > other.value
def __ge__(self, other):
"""Vergleicht den Wert der Speicherzelle mit einem anderen Wert."""
assert isinstance(other, Literal), "Can only compare with Literal or MemoryCell"
self.compare_count += 1
self.read_count += 1
other.read_count += 1
return self.value >= other.value
def __str__(self):
"""Repräsentation des Werts."""
return f"{self.value}"
def __repr__(self):
"""Repräsentation des Werts für Debugging-Zwecke."""
return f"Literal(value={self.value}, reads={self.read_count})"
def get_read_count(self):
"""Gibt zurück, wie oft der Wert gelesen wurde."""
return self.read_count
def __int__(self):
"""Gibt den Wert als Integer zurück."""
self.read_count += 1
return int(self.value)
def succ(self):
return Literal(self.value+1)
def pred(self):
return Literal(self.value-1)
if __name__ == "__main__":
l1 = Literal(5)
l2 = Literal(3)
print(l1 == l2)
print(l1 > l2)