63 lines
2.2 KiB
Python
63 lines
2.2 KiB
Python
from literal import Literal
|
|
from memory_cell import MemoryCell
|
|
from memory_manager import MemoryManager
|
|
|
|
class MemoryArray:
|
|
|
|
def __init__(self, size):
|
|
"""Initialisiert ein Speicherarray mit einer bestimmten Größe."""
|
|
assert isinstance(size, Literal), "Size must be a Literal or MemoryCell"
|
|
assert isinstance(size.value, int), "Size must be an int"
|
|
assert size.value > 0, "Size must be positive"
|
|
self.size = size.value
|
|
self.cells = [MemoryCell() for _ in range(self.size)]
|
|
|
|
def __getitem__(self, index):
|
|
"""Gibt den Wert einer Speicherzelle zurück."""
|
|
assert isinstance(index, Literal), "Index must be a Literal or MemoryCell"
|
|
assert isinstance(index.value, int), "Index value must be an int"
|
|
assert 0 <= index.value < self.size, "Index out of bounds"
|
|
return self.cells[index.value]
|
|
|
|
def __setitem__(self, index, value):
|
|
"""Setzt den Wert einer Speicherzelle."""
|
|
assert isinstance(index, Literal), "Index must be a Literal or MemoryCell"
|
|
assert isinstance(index.value, int), "Index value must be an int"
|
|
assert 0 <= index.value < self.size, "Index out of bounds"
|
|
assert isinstance(value, Literal), "Value must be a Literal or MemoryCell"
|
|
self.cells[index.value].set(value.value)
|
|
|
|
def __len__(self):
|
|
"""Gibt die Größe des Speicherarrays zurück."""
|
|
return self.size
|
|
|
|
def __str__(self):
|
|
"""Gibt eine Liste der Speicherzellen zurück."""
|
|
return str([cell.value for cell in self.cells])
|
|
|
|
def __iter__(self):
|
|
"""Gibt einen Iterator über die Speicherzellen zurück."""
|
|
return iter(self.cells)
|
|
|
|
def indices(self):
|
|
"""Gibt eine Liste der Indizes der Speicherzellen zurück."""
|
|
return [Literal(i) for i in range(self.size)]
|
|
|
|
def reset_counters(self):
|
|
"""Setzt alle Zähler auf 0 zurück."""
|
|
for cell in self.cells:
|
|
cell.reset_counters()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
import random
|
|
size = Literal(5)
|
|
a = MemoryArray(size)
|
|
for i in a.indices():
|
|
a[i] = Literal(random.randint(1,100))
|
|
print(a)
|
|
sum = MemoryCell(0)
|
|
for cell in a.cells:
|
|
sum += cell
|
|
print(sum)
|
|
MemoryManager.print_statistics() |